참조: https://www.notion.so/96f6ed8a518b4245ab87dc8ffd669cbb?p=2c1ad78820f5409a874a8496d2bd100b
3 내가 원하는 이미지 찾기
3.1 도커 레지스트리
도커 레지스트리에는 사용자가 사용할 수 있도록 데이터베이스를 통해 Image를 제공해주고 있음
누구나 이미지를 만들어 푸시할 수 있으며 푸시된 이미지는 다른 사람들에게 공유 가능
3.3 도커 명령어로 검색
sudo docker search tomcat
3.4 도커 이미지 다운로드하기
sudo docker pull tomcat
3.5 로컬 시스템에 있는 도커 이미지 확인하기
sudo docker images
4 도커 라이프 사이클 이해하기
5 도커 라이프 사이클 명령어 실습
5.1 도커 이미지 다운로드와 삭제
sudo docker pull consol/tomcat-7.0
sudo docker rmi consol/tomcat-7.0
5.2 톰캣 컨테이너 생성
sudo docker run -d --name tc tomcat # 톰캣 생성 및 실행
5.3 실행중인 컨테이너 확인
sudo docker ps # 톰캣 컨테이너 확인
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6e513b399a6 tomcat "catalina.sh run" 27 seconds ago Up 26 seconds 8080/tcp tc
5.4 모든 컨테이너 확인
sudo docker ps -a # 모든 컨테이너 확인
5.5 컨테이너 중지
sudo docker stop f6e513b399a6 # 컨테이너 실행 중지
f6e513b399a6
5.6 컨테이너 삭제
sudo docker rm f6e513b399a6 # 컨테이너 삭제
f6e513b399a6
6 이미지 비밀: 레이어
6.1 레이어의 개념
왼쪽: 이미지 A를 지운다 하더라도 이미지 B에서 레이어 A, B, C를 사용하고 있기 때문에 지워지지 않음
오른쪽: 이미 존재하는 레이어 A, B는 새로 다운로드 받을 필요가 없음
6.2 도커 이미지 정보 확인
sudo docker pull nginx
sudo docker inspect nginx
6.3 도커 이미지 저장소 위치 확인
sudo docker info
sudo -i
cd /var/lib/docker/overlay2
6.4 레이어 저장소 확인
root@server1-VirtualBox:/var/lib/docker/overlay2# ls
0cc29ea5605872d9c8291673064e85b07160203fbf04b34eeeed899731361960 # 레이어 변경 사항 저장
615767e7221dbc99b8e441e35a88df5d74c911f2674ceaa28001388535e95be2 # 레이어 변경 사항 저장
9f3bb671f38d7f61f661af369d420cdedb195e4d623bdb6ba8e3b045f72e8d69 # 레이어 변경 사항 저장
l # 원본 레이어 저장
6.5 도커 용량 확인하기
du -sh /var/lib/docker/ #도커가 설치된 환경 용량 확인
2.0G /var/lib/docker/
du -sh /var/lib/docker/image/ # 도커 이미지에 대한 정보 저장 디렉토리
2.7M /var/lib/docker/image/
du -sh /var/lib/docker/overlay2/ # 도커 이미지의 파일 시스템이 사용되는 실제 디렉토리
2.0G /var/lib/docker/overlay2/
du -sh /var/lib/docker/containers/ # 도커 컨테이너 정보 저장 디렉토리
136K /var/lib/docker/containers/
7 도커의 유용한 명령어
7.1 포트포워딩으로 톰캣 실행하기
sudo docker run -d --name tc -p 80:8080 tomcat
firefox 127.0.0.1:80
7.2 컨테이너 내부 셸 실행
sudo docker exec -it tc /bin/bash
7.3 컨테이너 로그 확인
sudo docker logs tc # stdout, stderr
7.4 호스트 및 컨테이너 간 파일 복사
sudo docker cp <path> <to container>:<path>
sudo docker cp <from container>:<path> <path>
sudo docker cp <from container>:<path> <to container>:<path>
7.5 도커 컨테이너 모두 삭제
sudo docker stop `sudo docker ps -a -q`
sudo docker rm `sudo docker ps -a -q`
7.6 임시 컨테이너 생성
sudo docker run -d -p 80:8080 --rm --name tc tomcat
8 도커 컨테이너 실행 연습문제
- 기존에 설치된 모든 컨테이너와 이미지 정지 및 삭제
- 도커 기능을 사용해 Jenkins 검색
- Jenkins를 사용하여 설치
- Jenkins 포트로 접속하여 웹 서비스 열기
- Jenkins의 초기 패스워드 찾아서 로그인하기
정답 및 해설
1. 기존에 설치된 모든 컨테이너와 이미지 정지 및 삭제
sudo docker stop `sudo docker ps -a -q`
sudo docker rm `sudo docker ps -a -q`
sudo docker rmi `sudo docker images -q`
2. 도커 기능을 사용해 Jenkins 검색
sudo docker search jenkins
3. Jenkins를 사용하여 설치
sudo docker pull jenkins
sudo docker inspect jenkins
sudo docker run -d -p 8080:8080 --name jk jenkins test
4. Jenkins 포트로 접속하여 웹 서비스 열기
firefox 127.0.0.1:8080
브라우저에 캐시가 남아있는 경우에는 ctl + shift + del
5. Jenkins의 초기 패스워드 찾아서 로그인하기
sudo docker exec -it jk cat /var/jenkins_home/secrets/initialAdminPassword
sudo docker logs jk
9 환경 변수 사용해 MySQL 서비스 구축하기
9.1 docker hub에서 mysql 검색
9.2 환경 변수 사용해 데이터 전달하기
$ docker run -d --name nx -e env_name=test1234 nginx
/# printenv env_name
9.3 MySQL 서비스 구축하기
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='!qhdkscjfwj@' -d mysql
$ docker exec -it some-mysql mysql
password: !qhdkscjfwj@
mysql>
10 볼륨 마운트하여 Jupyter LAB 서비스 구축
10.1 docker hub에서 Jupyter notebook 검색
10.2 볼륨 마운트 옵션 사용해 로컬 파일 공유하기
- 명령어 형식
docker run -v <호스트 경로>:<컨테이너 내 경로>:<권한> # /tmp:home/user:ro
- 권한의 종류
- ro: 읽기 전용
- rw: 읽기 및 쓰기
nginx로 볼륨마운트하기
sudo docker run -d -p 80:80 --rm -v /var/www:/usr/share/nginx/html:ro nginx
curl 127.0.0.1
echo 1234 > /var/www/index.html
curl 127.0.0.1
10.3 데이터 분석가를 위한 Jupyter LAB 환경 구축하기
현재 디렉토리를 사용하여 notebook 컨테이너 실행
mkdir ~/jupyternotebook
chmod 777 ~/jupyternotebook
cd ~/jupyternotebook
sudo docker run --rm -p 8080:8888 -e JUPYTER_ENABLE_LAB=yes -v "$PWD":/home/jovyan/work:rw jupyter/datascience-notebook:9b06df75e445
실행하면 나오는 링크를 통해 접속한다.
http://127.0.0.1:8080/token=??????????????????
주피터랩 서버로 접속해서 work으로 접속하고 새 노트북 생성하고 코드를 작성한다.
print("Hello Python Jupyter Notebook")
타이핑 후 shift + Enter를 누르면 실행한다
11 직접 도커 이미지 빌드하기
11.1 도커 빌드할 프로그램 준비
python를 사용해 단순한 서비스를 시작 작성한다. 다음 파일을 작성하여 test_server.py로 저장한다.
# test_server.py
import socket
with socket.socket() as s:
s.bind(("0.0.0.0", 12345))
s.listen()
print("server is started")
conn, addr = s.accept()
# conn 클라이언트와 통신할 소켓
# addr 클라이언트의 정보가 들어있음
with conn:
print("Connected by", addr)
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
python3 test_server.py
---
nc 127.0.0.1 12345
11.2 도커 파일 생성
별도의 디렉토리를 생성하고 dockfile과 위에서 생성한 python파일을 새 디렉토리에 배치한다.
mkdir my_first_project
mv test_server.py ./my_first_project/
cd my_first_project/
gedit dockerfile
dockerfile
FROM python:3.7
RUN mkdir /echo
COPY test_server.py /echo
CMD ["python", "/echo/test_server.py"]
빌드 후 테스트
ls
dockerfile test_server.py
sudo docker build -t ehco_test .
sudo docker images
sudo docker run -t -p 12345:12345 --name et --rm echo_test
nc 127.0.0.1 12345
12 도커 이미지 푸시
12.1 도커 이미지 태그 변경 후 푸시
먼저 회원가입을 하도록 한다.
회원가입한 정보를 토대로 다음 내용을 작성한다. login을 하지 않으면 정상 동작하지 않는다. gasbugs라는 문자열은 여러분이 사용하는 아이디로 바꿔서 실행해야만 한다.
sudo docker login
sudo docker tag echo_test ***gasbugs***/echo_test:v3.7
sudo docker images
sudo docker push ***gasbugs***/echo_test:v3.7
https://hub.docker.com/ 에 접속하여 내 레파지토리에 도커가 잘 등록됐는지 확인해본다.
모든 이미지 삭제 후 다시 gasbugs/echo_test 실행하여 잘 다운로드돼 실행되는지 테스트한다.
sudo docker rmi `docker images -q` -f
sudo docker run -t -p 12345:12345 --name et --rm gasbugs/echo_test:v3.7
12.2 도커 이미지 히스토리 확인
다음 명령을 사용하면 도커 이미지가 어떤 히스토리를 가졌는지 확인할 수 있다. 제일 상단에 앞서 우리가 dockerfile을 빌드해서 추가한 정보가 있다.
docker history ***gasbugs/echo_test***
13 프라이베이트 레지스트리 구현 및 사용
private registry 만들기
docker run -d --name docker-registry -p 5000:5000 registry
브라우저를 켜서 127.0.0.1:5000/v2/ 서비스 접속 가능한지 확인
프라이베이트 레지스트리에 이미지 푸시하기
sudo docker tag echo_test 127.0.0.1:5000/echo_test
sudo docker push 127.0.0.1:5000/echo_test
도커 API 관련 링크: https://docs.docker.com/registry/spec/api/
인증 관련 참고 링크: https://docs.docker.com/registry/configuration/#auth
14 워드프레스 도커 이미지 만들기 프로젝트
도커에서 제공하는 워드프레스와 MySQL은 따로 떨어진 형태로 존재한다. 여기서는 하나의 컨테이너에서 워드프레스와 MySQL을 동작시킬 수 있도록 만들어본다. 일단 가장 먼저 할 일은 PHP와 DB가 공존하는 환경을 찾는 것이다. 다양한 솔루션들이 있는데 그중에 XAMPP는 도커로 이미 만들어져있어 유용하게 사용할 수 있다. xampp는 apache, MariaDB, php가 설치돼 있다. 여기에 워드프레스만 올리면 바로 컨테이너를 만들 수 있다.
먼저 도커 허브에서 다음 사이트를 찾아내자.
https://hub.docker.com/r/tomsik68/xampp
이 사이트의 컨테이너를 불러온 뒤 워드프레스 설치 과정을 진행하도록 한다. 컨테이너에서 SSH와 다앙한 포트를 지원하지만 우리는 80포트만 사용할 예정이다.
sudo docker run --name WP -p 80:80 -d tomsik68/xampp
이제 가상환경은 준비됐으니 워드프레스를 설치하는 작업만 남았다. "워드프레스 다운로드"를 검색하자.
워드프레스 바로가기: https://ko.wordpress.org/download/
wget을 사용해 다운로드하고 압축을 푼다.
wget https://ko.wordpress.org/latest-ko_KR.tar.gz
tar -xf latest-ko_KR.tar.gz
컨테이너 내의 웹 파일 정리
sudo docker exec -it WP bash
chown daemon. /opt/lampp/htdocs
cd /opt/lampp/htdocs/
mkdir backup
mv * ./backup/
exit
워드프레스 파일을 컨테이너에 복사하고 웹 루트 디렉토리에 배치
sudo docker cp wordpress WP:/opt/lampp/htdocs
sudo docker exec -it WP bash
mv /opt/lampp/htdocs/wordpress/* /opt/lampp/htdocs/
exit
sudo docker restart WP
127.0.0.1/phpmyadmin으로 접속해서 wordpress 데이터베이스 생성한다
마지막으로 127.0.0.1로 접속하여 워드프레스 설치를 웹 브라우저 화면으로 진행하면 된다
저장소에 보관 및 PULL
1. 컨테이너 STOP
docker stop WP
2. COMMIT
docker commit WP 본인ID/wordpress
PUSH할 이미지 확인
docker images
3. PUSH
도커 허브 로그인
docker login
PUSH
docker push 본인ID/wordpress
허브에 올라가있는지 확인
https://hub.docker.com/
4. PULL
기존 컨테이너 삭제
docker rm `docker ps -a -q`
허브에 올라간 이미지 실행
docker run -d -p 80:80 --rm 본인ID/wordpress
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 3. 쿠버네티스 들어가기 (0) | 2020.08.22 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 2. 쿠버네티스 소개 (0) | 2020.08.18 |
[도커(Docker)의 이해] 4. 이미지 빌드 환경 만들기 (0) | 2019.10.07 |
[도커(Docker)의 이해] 3. 이미지 만들고 배포하기 (0) | 2019.10.07 |
[도커(Docker)의 이해] 2. 컨테이너 실행하기 (0) | 2019.10.07 |
댓글