[우아한테크코스] 8월 11일 TIL

2 minute read

[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

스크린샷 2021-08-11 오후 7.25.23

이미지를 Pull 받으면 여러 개로 나눠져서 내려받는데 이렇게 하나씩 나뉘는 것을 레이어라고 한다.

레이어는 도커 이미지가 빌드될 때 Dockerfile에 정의된 명령문을 순서대로 실행하면서 만들어진다.

이 레이어는 독립적으로 저장되며 읽기 전용이기 때문에 임의로 수정할 수 없다.

스크린샷 2021-08-11 오후 7.28.05

도커 컨테이너가 실행되면 읽기 전용을 순서대로 쌓고 마지막에 쓰기 가능한 레이어를 추가한다. 이후 컨테이너에서 만들어지는 결과물들이 쓰기 가능 레이어에 기록된다.

레이어별로 이미 만들어진 레이어는 캐시되어 재사용되므로 빌드 시간이 단축된다.

1. 현재 돌아가고 있는 컨테이너를 image화 하기

$ docker commit -a "만들이미지이름" 컨테이너id 현재이미지이름

2. 우리의 프로젝트 기본 세팅을 image화 하기

명령어

  • WORKDIR: mkdir + cd
  • ENTRYPOINT java -jar ~~: shell
  • ENTRYPOINT [“java”, “-jar ~~”]: exec
  • RUN: 캐시할 수 있는 단위
  • ADD, COPY: 로컬 파일을 컨테이너로 복사
  1. 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"]
  1. 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에 올리기

  1. sudo docker login하고 로그인
  2. docker tag 만든이미지이름:태그 dusdn1702/원하는이미지명:태그
  3. docker push dusdn1702/원하는이미지명

도커에서도 git ssh key로 접속해서 서브모듈에 들어가고 싶어요!

  1. 해당 서버에 git에 접속할만한 key를 받아줍니다.

    새로 발급할거라면? ssh-keygen -t rsa -C "dusdn1702@gmail.com"

    연결되는지 확인할라면? ssh git@github.com -> hi dusdn1702 나오면 성공

    그럼 ~./ssh에 public, private 키가 모두 만들어집니다

    이렇게 만들어진 키가 github에 등록되어있지 않으면 등록합니다. SSH and GPG keys

  2. 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;

스크린샷 2021-08-12 오전 3.32.26