[우아한테크코스] 8월 11일 TIL
[docker] image 만들기
ubuntu 18.04 docker 설치
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker
docker image
이미지를 Pull 받으면 여러 개로 나눠져서 내려받는데 이렇게 하나씩 나뉘는 것을 레이어라고 한다.
레이어는 도커 이미지가 빌드될 때 Dockerfile에 정의된 명령문을 순서대로 실행하면서 만들어진다.
이 레이어는 독립적으로 저장되며 읽기 전용이기 때문에 임의로 수정할 수 없다.
도커 컨테이너가 실행되면 읽기 전용을 순서대로 쌓고 마지막에 쓰기 가능한 레이어를 추가한다. 이후 컨테이너에서 만들어지는 결과물들이 쓰기 가능 레이어에 기록된다.
레이어별로 이미 만들어진 레이어는 캐시되어 재사용되므로 빌드 시간이 단축된다.
1. 현재 돌아가고 있는 컨테이너를 image화 하기
$ docker commit -a "만들이미지이름" 컨테이너id 현재이미지이름
2. 우리의 프로젝트 기본 세팅을 image화 하기
명령어
- WORKDIR: mkdir + cd
- ENTRYPOINT java -jar ~~: shell
- ENTRYPOINT [“java”, “-jar ~~”]: exec
- RUN: 캐시할 수 있는 단위
- ADD, COPY: 로컬 파일을 컨테이너로 복사
- Dockerfile 생성
FROM ubuntu:16.04
MAINTAINER dusdn1702@gmail.com
RUN apt-get -y update
FROM mysql:5.7.15
ENV MYSQL_DATABASE=zzimkkong \
MYSQL_ROOT_PASSWORD=1234
#ADD schema.sql /docker-entrypoint-initdb.d
EXPOSE 3306
FROM ubuntu:16.04
MAINTAINER dusdn1702@gmail.com
RUN apt-get -y update
# java 설치
FROM openjdk:11-jdk
# git 설치
RUN apt-get -y install git
RUN git clone https://github.com/dusdn1702/2021-zzimkkong.git
COPY . /2021-zzimkkong/backend
WORKDIR /2021-zzimkkong/backend
# build
RUN chmod +x ./gradlew
RUN ./gradlew clean build -x test
ARG ENVIRONMENT
ENV SPRING_PROFILES_ACTIVE=${ENVIRONMENT}
EXPOSE 8080
ENV USE_PROFILE prod
# COPY build/libs/backend-0.0.1-SNAPSHOT.jar /home/application.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=${USE_PROFILE}", "-jar","build/libs/backend-0.0.1-SNAPSHOT.jar"]
- Dockerfile build
매개변수 없는 버전: docker build -t app:0.1 .
매개변수 있는 버전: docker build -t 이름:태그 --build-arg ssh_prv_key="$(cat ~/.ssh/id_rsa)" --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)" .
만들어진 image run
docker run -it 컨테이너id/name /bin/bash
docker run --name dockerC -d -p 8080:8080 -v /root/centos/data:/data
-> ??
태그, 이름 줬을 때 : docker run --name test -it test:v0.2
만들어진 image hub에 올리기
sudo docker login
하고 로그인docker tag 만든이미지이름:태그 dusdn1702/원하는이미지명:태그
docker push dusdn1702/원하는이미지명
도커에서도 git ssh key로 접속해서 서브모듈에 들어가고 싶어요!
-
해당 서버에 git에 접속할만한 key를 받아줍니다.
새로 발급할거라면?
ssh-keygen -t rsa -C "dusdn1702@gmail.com"
연결되는지 확인할라면?
ssh git@github.com
-> hi dusdn1702 나오면 성공그럼 ~./ssh에 public, private 키가 모두 만들어집니다
이렇게 만들어진 키가 github에 등록되어있지 않으면 등록합니다. SSH and GPG keys
-
dockerfile에 추가
# argument로 key를 전달받는 코드 ARG ssh_prv_key ARG ssh_pub_key # git 설치, openssh-server 설치 코드 RUN apt-get update && \ apt-get install -y \ git \ openssh-server # ssh host 인증받는 코드 RUN mkdir -p /root/.ssh && \ chmod 0700 /root/.ssh && \ ssh-keyscan github.com > /root/.ssh/known_hosts # 키를 통해서 인가받는 코드 RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \ echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \ chmod 600 /root/.ssh/id_rsa && \ chmod 600 /root/.ssh/id_rsa.pub # 서브모듈 클론 RUN git submodule update --init --remote
-
인자전달 안하는 방법
RUN mkdir -p /root/.ssh ADD id_rsa /root/.ssh/id_rsa RUN chmod 700 /root/.ssh/id_rsa RUN echo " IdentityFile ~/.ssh/id_rsa" >> /etc/ssh/ssh_config
도커 모든 이미지 삭제: ` docker rmi $(docker images -q) `
with 컨테이너: docker rmi -f $(docker images -q)
참고
mysql 안되는거
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
- 실행할것
mysql -u root
alter user ‘root’@’localhost’ identified with mysql_native_password by ‘1234’;
create database zzimkkong DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;