-
03. (쿠버네티스 들어가기 앞서) 왕초보도 따라하는 도커 기초 (2)24년 11월 이전/데브옵스(DevOps)를 위한 쿠버네티스 마스터 2021. 6. 30. 21:46반응형
이 문서는 인프런 강의 "데브옵스를 위한 쿠버네티스 마스터"을 듣고 작성되었습니다. 최대한 요약해서 강의 내용을 최소로 하는데 목표를 두고 있어서, 더 친절하고 정확한 내용을 원하신다면 강의를 구매하시는 것을 추천드립니다. => 강의 링크
도커로 환경 변수 전달하기
보안 상의 이유로
MySQL
의 루트 비밀 번호 등, 컨테이너 내부에 민감한 정보를 저장할 수 없을 수 있다. 그럴 때 이용할 수 있는게-e
옵션을 이용한 환경 변수를 전달하는 것이다.# sudo -i 명령어로 먼저 관리자 권한을 얻어야 한다. > docker run --name mysql --rm -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
그 후 먼저 컨테이너에 접속해보자.
# 컨테이너 접속 > docker exec -it mysql bash
이 때 전달한 환경변수는
printenv
명령어로 확인할 수 있다.\# printenv MYSQL_MAJOR=8.0 HOSTNAME=c7354e51aff7 PWD=/ # 여기에 설정되어있다. MYSQL_ROOT_PASSWORD=password HOME=/root MYSQL_VERSION=8.0.25-1debian10 GOSU_VERSION=1.12 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/printenv
이제 환경 변수로 전달된 비밀번호로
MySQL
에 접속해보자.\# mysql -p Enter password: <비밀번호 입력>
제대로 접속이 된다면 다음과 같은 결과를 얻을 수 있다.
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.25 MySQL Community Server - GPL Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
도커로 volume 마운트하기
-v
옵션을 사용해서 호스트-컨테이너간 volume 마운트도 가능하다.참고! 호스트란?
Docker가 설치된 머신을 의미한다.찰고! volume 마운트란
마운트란 용량 확보 등의 이유로 하드 디스크를 리눅스의 특정 디렉토리와 매핑하는 것을 말한다. volume 마운트는 호스트의 디렉토리와 컨테이너의 디렉토리를 매핑하는 것을 의미한다. 권한에 따라 컨테이너에서 마운트된 디렉토리의 내용을 읽을 수도, 또는 읽고 작성할 수도 있다.터미널에 다음을 입력한다.
> docker run --name ng -p 80:80 -d --rm -v /var/www:/usr/share/nginx/html nginx:latest
그리고
curl
명령어로nginx
에 접속해보자. (컨테이너 접속은 하지 않는다.)> curl localhost <html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.21.0</center> </body> </html>
현재 컨테이너 내부에서
/usr/share/nginx/html
디렉토리 내부에index.html
파일이 없기 때문에 기본nginx
페이지가 보인다. 이제 컨테이너가 아닌 호스트에서 컨테이너 내부와 매핑된/var/www
디렉토리에index.html
을 생성할 것이다.> echo "hello world" > /var/www/index.html
이제 다시 한 번
nginx
에 접속해보자.> curl localhost hello world
이런게 volume 마운트이다. 호스트의
/var/www
의index.html
을 작성하면, 컨테이너 안의/usr/share/nginx/html
에서도/var/www
를 마운트했기 때문에 역시index.html
이 존재한다. 쉽게 생각해서 두 디렉토리는 같은 디렉토리이고 컨테이너에서 이를 참조한다고 생각하면 된다.도커 이미지 빌드하기
이제 직접 도커 이미지를 만들어보자. 터미널에 다음을 입력한다.
# test 디렉토리 생성 > mkdir test # test 디렉토리 이동 > cd test # main.go 작성 > tee main.go << EOF package main import ( "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { w.Write([]byte("Hello World")) }) http.ListenAndServe(":8080", nil) } EOF # Dockerfile 작성 > tee Dockerfile << EOF FROM golang:1.16 WORKDIR /app COPY . . RUN go mod init app RUN go get RUN go build -o app . EXPOSE 8080 CMD ["/app/app"] EOF # 도커 이미지 빌드 > docker build -t go-simple-app .
이것도 기존 이미지와 같이 실행할 수 있다.
> docker run --name app -p 8080:8080 -d --rm go-simple-app
이제
curl
로 한 번 잘 실행이 되나 확인해보자.> curl localhost:8080 Hello World
도커 레지스트리 구축
기본적으로 작성한 도커 이미지를
Docker Hub
에 올릴 수 있다.Docker Hub
같이 도커 이미지 저장소를Docker Registry
라고 부른다. 문제는Docker Hub
는 너무 공개적이라는 것이다. 하지만 걱정하지 마시라! private한Docker Registry
를 만드는 것은 매우 쉽다. 터미널에 다음을 입력한다.> docker run -d --name docker-registry -p 5000:5000 registry:latest
바로
registry
가 도커에서 공식적으로 제공하는Docker Registry
이미지이다. 이를 컨테이너로 실행하면 된다.도커 이미지 푸시하기
이제 우리가 만든 도커 이미지를 구축한 도커 레지스트리에 이미지를 저장시켜보자. 이 작업을 푸시라고 한다. 먼저 레지스트리로 저장할 수 있게 이미지 이름을 다시 지어야 한다.
# docker tag <image name> <registry ip>:<port>/<image name> > docker tag go-simple-app localhost:5000/go-simple-app
그 후 다시 지은 이름으로
docker push
명령어를 입력하면 된다.> docker push localhost:5000/go-simple-app
이제
Docker registry
제외한 모든 컨테이너 및 이미지를 제거한다. 그 후 레지스트리에서 이미지를 설치하고 컨테이너로 실행시켜보자.> docker pull localhost:5000/go-simple-app > docker run --name app -p 8080:8080 -d --rm localhost:5000/go-simple-app
그 후 다시
curl
로 접속해본다.> curl localhost:8080 Hello World
728x90'레거시 > 데브옵스(DevOps)를 위한 쿠버네티스 마스터' 카테고리의 다른 글
06. 쿠버네티스 핵심 개념 (1) (0) 2021.07.09 05. 쿠버네티스 들어가기 (2) (0) 2021.07.06 04. 쿠버네티스 들어가기 (1) (5) 2021.07.03 02. (쿠버네티스 들어가기 앞서) 왕초보도 따라하는 도커 기초 (1) (0) 2021.06.28 01. 도커와 쿠버네티스 시작하기 (4) 2021.06.22