가상 머신
Virtual Box
컴퓨터 위에 새로운 운영체제를 올림
OS를 새로 깔아줘야함(시간이 걸림)
기능 이용에 있어 제약 없음
램 메모리 등을 초반에 설정해주는데 그에 따라 띄우면 무조건 점유함
Docker
컨테이너
로컬 환경과 격리를 시키고 싶을 때 Host OS를 공유하여 환경만 격리시키는 기술(OS 설치 필요 없음) => 더 빠름
거의 터미널밖에 못 씀 ex. 웹서버 하나만 격리시키고 싶을 때 사용
로컬에 있는 리소스 사용
Doker 설치
설치 확인
user@LAPTOP-VFKJ34NR C:\Users\user
$ docker -v
Docker version 20.10.12, build e91ed57
작동 확인
user@LAPTOP-VFKJ34NR C:\Users\user
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:507ecde44b8eb741278274653120c2bf793b174c06ff4eaa672b713b3263477b
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
우분투 컨테이너 실행
user@LAPTOP-VFKJ34NR C:\Users\user
$ docker run -it ubuntu:18.04 bash
Unable to find image 'ubuntu:18.04' locally
68e7bb398b9f: Pull complete
Digest: sha256:c2aa13782650aa7ade424b12008128b60034c795f25456e8eb552d0a0f447cad
Status: Downloaded newer image for ubuntu:18.04
root@61521d626df6:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@61521d626df6:/#
컨테이너 확인
실행중인 컨테이너만 확인
PS C:\Users\user> docker ps
종료된 컨테이너까지 확인 (-a)
PS C:\Users\user> docker ps -a
우분투 컨테이너 이름 설정하고 실행
PS C:\Users\user> docker run -dit --name ubuntu-test ubuntu:18.04 bash
e21b35d1f60bb9e816f3f65e710e4615b5fa1238256640aaa131bdca038d1de6
PS C:\Users\user> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e21b35d1f60b ubuntu:18.04 "bash" 15 seconds ago Up 14 seconds ubuntu-test
컨테이너 실행(bash 접근)
bash 접근이 안되는 경우가 있으니 비추천(exec 사용 추천)
PS C:\Users\user> docker attach ubuntu-test
컨테이너 버전 확인
root@e21b35d1f60b:/# cat /etc/issue
Ubuntu 18.04.6 LTS \n \l
EXIT로 종료
실행중인 컨테이너도 같이 종료됨
root@e21b35d1f60b:/# exit
exit
PS C:\Users\user> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e21b35d1f60b ubuntu:18.04 "bash" 3 minutes ago Exited (0) 15 seconds ago ubuntu-test
다른 방법으로 컨테이너 실행(bash 접근)
attach보다 exec를 추천
PS C:\Users\user> docker exec -it ubuntu-test bash
root@e21b35d1f60b:/#
종료해도 컨테이너 실행 유지
i 태그(-it)로 인해 ctrl+p+q로 나갈 수 있음
root@e21b35d1f60b:/# read escape sequence
PS C:\Users\user> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e21b35d1f60b ubuntu:18.04 "bash" 6 minutes ago Up 2 minutes ubuntu-test
컨테이너 ID로 실행(bash 접근)
ps로 id를 확인할 수 있음
전체 다 써도 되지만 앞 3글자만 써도 됨
PS C:\Users\user> docker exec -it e21 bash
우분투 컨테이너 내에서 git 설치
업데이트
root@e21b35d1f60b:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [779 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [21.1 kB]
Get:7 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2555 kB]
Get:8 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:9 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:10 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1466 kB]
Get:11 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [2995 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2244 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [815 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [29.1 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [12.6 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [11.6 kB]
Fetched 24.3 MB in 2min 41s (151 kB/s)
Reading package lists... Done
git 설치
root@e21b35d1f60b:/# apt-get install git
git 버전 확인
root@e21b35d1f60b:/# git --version
git version 2.17.1
git 클론
git clone <git 주소>
root@e21b35d1f60b:/# git clone https://github.com/jay0v0/sample-repo.git
Cloning into 'sample-repo'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 14 (delta 1), reused 11 (delta 1), pack-reused 0
Unpacking objects: 100% (14/14), done.
클론한 디렉토리 확인
root@e21b35d1f60b:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sample-repo sbin srv sys tmp usr var
git 레포지토리로 이동 및 branch 확인
root@e21b35d1f60b:/# cd sample-repo/
root@e21b35d1f60b:/sample-repo# git checkout main
Already on 'main'
Your branch is up to date with 'origin/main'.
root@e21b35d1f60b:/sample-repo# git branch
* main
root@e21b35d1f60b:/sample-repo# git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/develop
remotes/origin/issue
remotes/origin/main
이미지 파일
이미지 파일 : 컨테이너를 실행하기 위해 필요
같은 이미지 파일(우분투)로 컨테이너 다중 생성
PS C:\Users\user> docker run -dit --name ubuntu1 ubuntu:18.04 00ced5d0c676383df91c7dab09f6e5782f88a5fff107111ec6c764145977d602
PS C:\Users\user> docker run -dit --name ubuntu2 ubuntu:18.04 91501703ed3a1e605c77c3f08c5c74536cb8008db0c5145bdc99ed0c8131b93f
PS C:\Users\user> docker run -dit --name ubuntu3 ubuntu:18.04 cafded895331aae8a7da9e8dd379f25fe6fda2b515fe049e26d1d1dc4a71ddff
PS C:\Users\user> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cafded895331 ubuntu:18.04 "bash" 5 seconds ago Up 4 seconds ubuntu3
91501703ed3a ubuntu:18.04 "bash" 10 seconds ago Up 9 seconds ubuntu2
00ced5d0c676 ubuntu:18.04 "bash" 17 seconds ago Up 16 seconds ubuntu1
e21b35d1f60b ubuntu:18.04 "bash" 40 minutes ago Up 36 minutes ubuntu-test
컨테이너 내용 확인
같은 이미지 파일로 생성했기 때문에 내용이 모두 동일하다.
PS C:\Users\user> docker attach ubuntu1 root@00ced5d0c676:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@00ced5d0c676:/# read escape sequence
PS C:\Users\user> docker attach ubuntu2 root@91501703ed3a:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@91501703ed3a:/# read escape sequence
PS C:\Users\user> docker attach ubuntu3 root@cafded895331:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@cafded895331:/# read escape sequence
컨테이너 내용 편집
초기 생성되었을 때 상태는 같지만 이후 수정은 완전히 서로 격리된 상태이다.
따라서 ubuntu1에서 만든 텍스트 파일이 ubuntu2에는 존재하지 않는다.
PS C:\Users\user> docker attach ubuntu1 root@00ced5d0c676:/# echo 'test1' > test1.txt
root@00ced5d0c676:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1.txt tmp usr var
root@00ced5d0c676:/# cat test1.txt
test1
root@00ced5d0c676:/# read escape sequence
PS C:\Users\user> docker attach ubuntu2 root@91501703ed3a:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
이미지 파일 다운
docker pull <이름>
기본값은 latest(최신버전)이다.
먼저 로컬에 동일한 이름의 이미지가 있나 보고 없으면 도커 허브에 이미지가 있는지 본다.
예시 centos, ubuntu 20.04 버전
PS C:\Users\user> docker pull centos
PS C:\Users\user\Desktop\220208 docker> docker pull ubuntu:20.04
이미지 파일 삭제
먼저 해당 이미지로 실행중인 컨테이너를 모두 삭제한 후 삭제 가능하다.
Docker 컨테이너 명령어 모음
컨테이너 실행하기(만들기)
docker run -dit --name <컨테이너 이름><이미지 이름>
도커 컨테이너 리스트 보기
docker ps
docker ps -a
도커 컨테이너 접근하기(이미 실행된 컨테이너에 접속하기)
docker exec -it <컨테이너 이름 or ID> bash
실행중인 컨테이너 삭제하기
docker rm -f <컨테이너 이름 or ID>
실행중인 컨테이너 이미지로 만들기
docker commit <컨테이너 이름 or ID> <만들고 싶은 이미지 이름>
도커 컨테이너 나가기 (-it 태그 있어야지 동작)
ctr + p + q
도커 컨테이너 중지하기
docker stop <컨테이너 이름>
도커 컨테이너 시작하기
docker start <컨테이너 이름>
이미지 도커 허브에 올리기
docker push <도커 허브 ID>/<이미지 이름>
이미지 삭제하기
docker rmi <이미지 이름>
컨테이너를 이미지로 commit (저장)
PS C:\Users\user> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cafded895331 ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu3
91501703ed3a ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu2
00ced5d0c676 ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu1
e21b35d1f60b ubuntu:18.04 "bash" 3 hours ago Up 3 hours ubuntu-test
PS C:\Users\user> docker commit ubuntu1 sample sha256:2dbbe2e14d0512622ac2faa82604e12ea231a24612602041eb94839a6e757d39
commit 결과 확인
PS C:\Users\user> docker images REPOSITORY TAG IMAGE ID CREATED SIZE
sample latest 2dbbe2e14d05 43 seconds ago 63.2MB
docker101tutorial latest a75a66b007ac 3 hours ago 28.8MB
ubuntu 18.04 dcf4d4bef137 6 days ago 63.2MB
alpine/git latest c6b70534b534 2 months ago 27.4MB
commit한 이미지로 컨테이너 만들기
PS C:\Users\user> docker run -dit --name ubuntu1-clone sample 4b911b443bd5ea52efb4ba5d573669560ef6eab318ab9f8be3e7369aaaa27ddd
PS C:\Users\user> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b911b443bd5 sample "bash" 14 seconds ago Up 13 seconds ubuntu1-clone
cafded895331 ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu3
91501703ed3a ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu2
00ced5d0c676 ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu1
e21b35d1f60b ubuntu:18.04 "bash" 3 hours ago Up 3 hours ubuntu-test
만든 컨테이너 확인
PS C:\Users\user> docker exec -it ubuntu1-clone bash root@4b911b443bd5:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1.txt tmp usr var
태그 추가 - 컨테이너 이미지로 커밋
버전 설정 등을 할 수 있다.
test2 버전으로 sample 이미지를 하나 더 만들었다.
PS C:\Users\user> docker commit ubuntu1 sample:test2 sha256:63c3f9497308a207d6c4e31d8fdc9bcd0511574b0be7e3d64663679b035a19dd
결과 확인
PS C:\Users\user> docker images REPOSITORY TAG IMAGE ID CREATED SIZE
sample test2 63c3f9497308 36 seconds ago 63.2MB
sample latest 2dbbe2e14d05 23 minutes ago 63.2MB
docker101tutorial latest a75a66b007ac 4 hours ago 28.8MB
ubuntu 18.04 dcf4d4bef137 6 days ago 63.2MB
alpine/git latest c6b70534b534 2 months ago 27.4MB
컨테이너 만들면 정상 작동 한다.
PS C:\Users\user> docker run -dit --name ubuntu1-clone2 sample:test2
d5ee382fb24af1bed337c274ef9fa82308824a7ee5d59a0fe62bfe61fff5e837
PS C:\Users\user> docker exec -it ubuntu1-clone2 ls
bin dev home lib64 mnt proc run srv test1.txt tmp var
boot etc lib media opt root sbin sys test2.txt usr
컨테이너 삭제
stop 후 rm으로 삭제
PS C:\Users\user> docker stop ubuntu1-clone2
ubuntu1-clone2
PS C:\Users\user> docker rm ubuntu1-clone2
ubuntu1-clone2
PS C:\Users\user> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b911b443bd5 sample "bash" 24 minutes ago Up 24 minutes ubuntu1-clone
cafded895331 ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu3
91501703ed3a ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu2
00ced5d0c676 ubuntu:18.04 "bash" 2 hours ago Up 2 hours ubuntu1
e21b35d1f60b ubuntu:18.04 "bash" 3 hours ago Up 3 hours ubuntu-test
rm -f로 stop 없이 강제 삭제
PS C:\Users\user> docker rm -f ubuntu1-clone
ubuntu1-clone
다중 삭제
아이디를 이용해 여러개 동시 삭제 가능
PS C:\Users\user> docker rm 123 cds
이미지 삭제
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jj/sample v0.1 c2d033b8c008 About a minute ago 63.2MB
jj/sample latest 8cd5b3bfc3ce 2 minutes ago 63.2MB
docker101tutorial latest a75a66b007ac 4 hours ago 28.8MB
ubuntu 18.04 dcf4d4bef137 6 days ago 63.2MB
alpine/git latest c6b70534b534 2 months ago 27.4MB
PS C:\Users\user> docker rmi 8cd c2d
Untagged: jj/sample:latest
Deleted: sha256:8cd5b3bfc3ce51a729f04299f8428d4f57d3287e91a817f07713410a144b574b
Deleted: sha256:a2b1be8bf97a04c6635f5822cba83dd936eb39c6f5135c47aba70950c3f4feb3
Untagged: jj/sample:v0.1
Deleted: sha256:c2d033b8c0086925f7663ab96fb057e5ae9b3f6c332bd6617006599e881b5598
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker101tutorial latest a75a66b007ac 4 hours ago 28.8MB
ubuntu 18.04 dcf4d4bef137 6 days ago 63.2MB
alpine/git latest c6b70534b534 2 months ago 27.4MB
이미지 docker hub에 업로드
docker hub에 로그인
PS C:\Users\user> docker login
Authenticating with existing credentials...
Login Succeeded
Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/
commit 및 push
jay0v0v/sample 이 앞부분이 docker hub 아이디와 일치해야 함
PS C:\Users\user> docker commit ubuntu3 jay0v0v/sample
sha256:b6fcfb81fbadc5ebefe16d6463c7d8683967e402f28d2e37fda2c56ca8266407
PS C:\Users\user> docker push jay0v0v/sample
Using default tag: latest
The push refers to repository [docker.io/jay0v0v/sample]
1dc52a6b4de8: Pushed
latest: digest: sha256:ba3e0e33d5d13e56fc26aaf32518f1e63081df7b5f76d50d917f976edc49909c size: 529
결과 확인(docker hub)
태그 추가 - commit 및 push
태그 : v0.1 버전
PS C:\Users\user> docker commit ubuntu3 jay0v0v/sample:v0.1
sha256:dc3dcd3e8aab25c72030c1e7cf997ba0df686aa80a6c08b27c7f880de9339878
PS C:\Users\user> docker push jay0v0v/sample:v0.1
The push refers to repository [docker.io/jay0v0v/sample]
609ce51543c3: Pushed
1dc52a6b4de8: Layer already exists
v0.1: digest: sha256:072f9890bfa5cbe6c6e709662653d4c71a3f31a7091cb28650b5c42bc7e764b3 size: 735
결과 확인(docker hub)
push한 두가지 버전 확인 가능
이미지 로컬로 pull
무료 버전의 경우 일단 퍼블릭으로 올라가기 때문에 내가 올린 파일 뿐만 아니라 강사님의 이미지 파일도 받을 수 있다.
PS C:\Users\user> docker pull jay0v0v/sample
Using default tag: latest
latest: Pulling from jay0v0v/sample
68e7bb398b9f: Pull complete
Digest: sha256:ba3e0e33d5d13e56fc26aaf32518f1e63081df7b5f76d50d917f976edc49909c
Status: Downloaded newer image for jay0v0v/sample:latest
docker.io/jay0v0v/sample:latest
PS C:\Users\user> docker pull korjsh/sample
Using default tag: latest
latest: Pulling from korjsh/sample
68e7bb398b9f: Already exists
0cdb9ebd3502: Pull complete
Digest: sha256:191fb9036463aa611c5aa0c46d24478bbc7da6d5dc50ea9cba4de1c93cb7c239
Status: Downloaded newer image for korjsh/sample:latest
docker.io/korjsh/sample:latest
여기서 이미지명 복붙하면 편하다
결과 확인
PS C:\Users\user> docker run -dit --name sample korjsh/sample
d87463db7e401df04935e31070fc0436aa6d007a38d012fe21822111dbebfb49
PS C:\Users\user> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d87463db7e40 korjsh/sample "bash" 4 seconds ago Up 2 seconds sample
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jay0v0v/sample latest b6fcfb81fbad 33 minutes ago 63.2MB
korjsh/sample latest 567ec62edf29 43 minutes ago 63.2MB
Private
무료 버전은 한개 가능
도커 파일로 이미지 만들어보기
현업에서는 도커 파일로 명시적으로 작성하는 걸 선호한다.
도커 파일 작성
C:\Users\user\Desktop\220208 docker\dockerfile
FROM ubuntu:18.04
# 베이스 이미지(무조건 맨 위에 존재)
RUN apt update
# RUN : 컨테이너 안에 설치할 수 있는 명령어 실행
RUN apt install -y git
도커 파일 이미지로 만들기
Powershell로 실행
. : 현재위치
PS C:\Users\user\Desktop\220208 docker> docker build -t jay0v0v/sample:git .
=> 실행을 먼저 해보고 이미지를 만든다(명령어 오류 없는지 등 확인 후)
[+] Building 32.6s (5/7)
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:18.0 4.6s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [1/3] FROM docker.io/library/ubuntu:18.04@sha256:c2aa13782 0.0s
=> => resolve docker.io/library/ubuntu:18.04@sha256:c2aa13782 0.0s
=> => sha256:c2aa13782650aa7ade424b12008128b6 1.41kB / 1.41kB 0.0s
=> => sha256:98706f0f213dbd440021993a82d2f70451a7 529B / 529B 0.0s
=> => sha256:dcf4d4bef137f695d11ed187ba6a1353 1.46kB / 1.46kB 0.0s
=> [2/3] RUN apt update 27.9s
=> => # Get:8 http://archive.ubuntu.com/ubuntu bionic/multiverse am
=> => # d64 Packages [186 kB]
=> => # Get:9 http://archive.ubuntu.com/ubuntu bionic/universe amd6
=> => # 4 Packages [11.3 MB]
=> => # Get:10 http://security.ubuntu.com/ubuntu bionic-security/ma
=> => # in amd64 Packages [2555 kB]
그리고 오류가 났다.
=> ERROR [3/3] RUN apt install -y git 170.6s
------
> [3/3] RUN apt install -y git:
#7 0.201
#7 0.201 WARNING: apt does not have a stable CLI interface. Use with
caution in scripts.
#7 0.201
구글링 해보니 apt-get을 사용하면 해결된다고 한다. 링크
근데 안됐다. 아래와 같은 에러가 떴다.
executor failed running [/bin/sh -c apt-get install git]: exit code: 1
주석이 문제인가 싶어 주석을 지우고 다시 해봤다.
PS C:\Users\user\Desktop\220208 docker> docker build -t jay0v0v/sample:git .
[+] Building 124.3s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 96B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:18.0 1.7s
=> [1/3] FROM docker.io/library/ubuntu:18.04@sha256:c2aa13782 0.0s
=> CACHED [2/3] RUN apt update 0.0s
=> [3/3] RUN apt install -y git 121.7s
=> exporting to image 0.8s
=> => exporting layers 0.8s
=> => writing image sha256:4d708e28f52d6ec575a7f591e2a8a55f9c 0.0s
=> => naming to docker.io/jay0v0v/sample:git 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
잘 됐다...
밑에서 클론 생성 하기 위해 push
PS C:\Users\user\Desktop\220208 docker> docker push jay0v0v/sample:git
The push refers to repository [docker.io/jay0v0v/sample]
75289143803c: Pushed
2d16324eeb97: Pushed
1dc52a6b4de8: Layer already exists
git: digest: sha256:024d680afac6bda3a20449c7a20190e2a247c1b3e27b8e7a2c4764662415662e size: 953
만든 이미지 파일 클론 생성
FROM jay0v0v/sample:git
RUN git clone https://github.com/jay0v0/sample-repo.git
도커 파일 이미지로 만들기
Powershell로 실행
PS C:\Users\user\Desktop\220208 docker> docker build -t jay0v0v/sample:gitclone .
여기서 자꾸 오류가 났다.
failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount041487040/Dockerfile: no such file or directory
알고보니 내가 구분한답시고 dockerfile2로 파일명을 한 탓이었다. 무조건 이름은 dockerfile이어야하고 구분하려면 폴더로 구분해야하는 것이었다.
파일명을 dockerfile로 하니 잘 됐다.
컨테이너 확인
rm : 한번 실행 뒤 삭제됨 => docker ps -a 해도 나오지 않음
PS C:\Users\user\Desktop\220208 docker> docker run -t --rm jay0v0v/sample:gitclone ls
bin dev home lib64 mnt proc run sbin sys usr
boot etc lib media opt root sample-repo srv tmp var
PS C:\Users\user\Desktop\220208 docker> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d87463db7e40 korjsh/sample "bash" 52 minutes ago Up 52 minutes sample
간단 정리
컨테이너 : 임시(날아가면 끝)
이미지 : 백업 가능
실습
<도커 허브 id>:nginx-container로 하면 오류가 나서 <도커허브ID>/<이미지이름>:nginx-container 로 수정되었다.
오류 내용
1번
우분투 20.04 버전 설치
PS C:\Users\user\Desktop\220208 docker> docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
Digest: sha256:669e010b58baf5beb2836b253c1fd5768333f0d1dbcb834f7c07a4dc93f474be
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
PS C:\Users\user\Desktop\220208 docker> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jay0v0v/sample gitclone ea075bfa2c7d 15 minutes ago 196MB
jay0v0v/sample git 4d708e28f52d 31 minutes ago 196MB
jay0v0v/sample latest b6fcfb81fbad 2 hours ago 63.2MB
ubuntu 20.04 54c9d81cbb44 6 days ago 72.8MB
우분투 컨테이너 생성
PS C:\Users\user\Desktop\220208 docker> docker run -dit --name ubuntu-20 ubuntu:20.04 bash
7dc5473d9f17992af6dd2fe48a7cb25e850818400e89758911ffa6ccad7aa802
PS C:\Users\user\Desktop\220208 docker> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7dc5473d9f17 ubuntu:20.04 "bash" 6 seconds ago Up 5 seconds ubuntu-20
d87463db7e40 korjsh/sample "bash" About an hour ago Up About an hour sample
우분투 컨테이너 bash 접근
PS C:\Users\user\Desktop\220208 docker> docker exec -it 7dc bash
root@7dc5473d9f17:/#
nginx 설치
root@7dc5473d9f17:/# apt install nginx
그리고 에러
Reading package lists...
Done Building dependency tree
Reading state information... Done
E: Unable to locate package nginx
구글링 해보니 업데이트를 해줘야 함 링크
apt update
root@7dc5473d9f17:/# apt update
업데이트 후 nginx 설치
root@7dc5473d9f17:/# apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
(생략)
Setting up nginx (1.18.0-0ubuntu1.2) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
성공!
이미지로 commit 하기
PS C:\Users\user\Desktop\220208 docker> docker commit 7dc jay0v0v/nginx:nginx-container
sha256:511f06d5a72da72da2a2d09c6666902f5f282ab085f2ade367ec3bc7077d033b
PS C:\Users\user\Desktop\220208 docker> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jay0v0v/nginx nginx-container 511f06d5a72d 5 seconds ago 166MB
jay0v0v/sample gitclone ea075bfa2c7d 30 minutes ago 196MB
jay0v0v/sample git 4d708e28f52d 46 minutes ago 196MB
jay0v0v/sample latest b6fcfb81fbad 2 hours ago 63.2MB
korjsh/sample latest 567ec62edf29 2 hours ago 63.2MB
ubuntu 20.04 54c9d81cbb44 6 days ago 72.8MB
2번
도커 파일 작성
FROM jay0v0v/nginx:nginx-container
RUN apt update
RUN apt install nginx
도커 파일 이미지로 만들기
Powershell로 실행
PS C:\Users\user\Desktop\220208 docker> docker build -t jay0v0v/nginx:nginx-dockerfile .
3번
도커 로그인
도커 허브에 업로드 하기 위해 로그인 한다.
PS C:\Users\user\Desktop\220208 docker> docker login
허브에 push(1번 파일)
PS C:\Users\user\Desktop\220208 docker> docker push jay0v0v/nginx:nginx-container
The push refers to repository [docker.io/jay0v0v/nginx]
4952ea941322: Pushed
36ffdceb4c77: Pushed
nginx-container: digest: sha256:ff60deb7ef47065e781d7c223ed48878d55b4d63cc0ad2a6c31fb62b43e60a8b size: 7PS
허브에 push(2번 파일)
PS C:\Users\user\Desktop\220208 docker> docker push jay0v0v/nginx:nginx-dockerfile
The push refers to repository [docker.io/jay0v0v/nginx]
0e97829d50f7: Pushed
09374681259e: Pushed
4952ea941322: Layer already exists
36ffdceb4c77: Layer already exists
nginx-dockerfile: digest: sha256:d8a1bc8903a61697341f094aa5e2a2fc14b0ca28b66da5d8b9e5d25d1f002668 size:
1158
결과
nginx 실행
강사님 도커 파일
nginx와 curl 설치(curl : 명령어로 웹에 get 요청용)
nginx 실행을 위해 CMD 명령줄이 있다.
FROM ubuntu:20.04
RUN apt update
RUN apt install -y nginx curl
CMD ["nginx", "-g", "daemon off;"]
컨테이너 실행 nginx
PS C:\Users\user\Desktop\220208 docker\nginx> docker run -dit --name nginx jay0v0v/nginx:nginx-dockerfile
nginx 실행
PS C:\Users\user\Desktop\220208 docker\nginx> docker exec -it nginx service nginx status
* nginx is running
curl로 요청
html 파일을 response로 줌
PS C:\Users\user\Desktop\220208 docker\nginx> docker exec -it nginx curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
포트 설정 -p
-p 8080:80: 앞에 있는게 로컬 포트 뒤에 있는 게 컨테이너 포트
=> -p <호스트>:<컨테이너>
PS C:\Users\user\Desktop\220208 docker\nginx> docker run -dit --name nginx1 -p 8080:80 jay0v0v/nginx:nginx-dockerfile
2e868bd6f80e7c667f7f24bc8e0a5e9d406f638f8fd2f217607f9342b7b98d82
결과
포트 하나 더 열기
포트 주소는 겹치면 안된다.(당연)
PS C:\Users\user\Desktop\220208 docker\nginx> docker run -dit --name nginx2 -p 8081:80 jay0v0v/nginx:nginx-dockerfile
VSCode에 Docker 확장 프로그램 설치
설치 완료
Attach shell 가능
Open in Browser 가능
Remote Development 확장 프로그램 설치
VSCode에서 컨테이너 실행 가능
Open Forder - ... 경로 설정 가능
서버에 올리기 가능
템플릿 받아서 html, css 등 파일을 저 경로에 넣어주면 그대로 서버에 올라감
webhook
알람 기능
github, docker, slack 가능
콜라비도 가능(Github만...docker는 메세지가 안뜬다)
느낀 점
01이 모여 코드가 되고 코드가 모여 프로그램이 되고...새삼 신기하다.
개발 환경 구현이 왜 머리가 아픈지 좀 알 것 같다.
나도 이걸 이용해서 프로젝트에 응용해보고 싶다...!
'공부 > Boot camp' 카테고리의 다른 글
TIL_220210_IIoT CPS / 클라우드 컴퓨팅 (0) | 2022.02.10 |
---|---|
TIL_220209_Git / Docker (0) | 2022.02.09 |
TIL_220207_DevOps/Git/Github (0) | 2022.02.07 |
TIL_220204_HMI (0) | 2022.02.04 |
TIL_220128_토큰 관리 / 검색 / 로그인 (0) | 2022.01.28 |