<컴퓨터 구조>
펌웨어(firmware) : 컴퓨터 하드웨어를 설정하는 s/w (사운드카드, 마우스, 키보드를 기초설정하는 소프트웨어)
BIOS : 메인보드에 따라 들어가는 방법이 다름 : del키, f2키를 시작할때 누르면 뜸
메인보드 : CPU, 메모리, 사운드카드 등이 꽃히는 칩셋
-> 메인보드에 메모리카드, 렘 등등 꽃고나서, BIOS를 통해 컴퓨터에 인식시켜야함
01_컨테이너
1. OS : 기본적으로 컴퓨터에 1개만 설치 가능
현재는 가상화 s/w 도움으로 여러개의 OS를 설치할 수 있음
대표주자로 docker가 인기가 있음
2. 활용
리눅스 OS 설치가능, db도 간단 설치 가능, 업무용 프로그램도 도커로 제작가능 등
서비스 업체들이 도커를 활용해서 서비스를 많이 함
3. 도커 구조
1) 이미지 : 다운받은 프로그램 등을 의미
2) 컨테이너 : 다운받은 프로그램을 실제 실행하는 것을 의미 : 이미지를 다운받아서 컨테이너로 실행(1:1)
- 컨테이너는 독립된 공간의 프로그램
- 바깥(윈도우 운영체제)과 격리되어 있어 기본적으로 통신이 안됨(리눅스 - 윈도우 : 별개)
4. 도커에서 hello-world 이미지(컨테이너) 실행하기 : docker run 컨테이너명
(hello-world만 성격이 다름
리눅스는 운영체제인데 hello-world는 리눅스에 접속이 안됨
화면에 출력하고 끝냄. 다운로드 받자마자 화면에 찍고 종료하는 프로그램)
exit 입력해서 linux 종료 시키면 꺽새가 나옴 : 윈도우
윈도우의 화면 지우기 : ctrl + l (X) / cls(O)
docker run hello-world 입력
=> 명령어 실행하면 일단 pc에 이미지가 있는지 확인하고,
없으면 docker hub 사이트에서 이미지를 다운로드 받아 결과를 실행함
예제) docker run hello-world 실행해보세요
C:\Users\GGG> docker run hello-world
# 이미지 다운로드 시작 : docker hub에서 hello-world 를 다운받음
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Status: Downloaded newer image for hello-world:latest
# 이미지 실행 : hello world 프로그램 결과가 화면에 출력될 부분
Hello from Docker! // 여기가 docker의 hello-world 프로그램
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/
C:\Users\GGG>
* 도커로 제작된 많은 프로그램들
5. 도커 진행 : docker pull 이미지명
1) 이미지 다운로드
(1) 도커 데스크탑에서 pull 버튼 클릭해서 받기
(2) 명령어 실행해서 받기 : docker pull 이미지명(리눅스는 도커 데스크탑에 없음)
연습) docker pull ubuntu 명령어 실행해서 받기
C:\Users\GGG>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
01007420e9b0: Pull complete
Digest: sha256:f9d633ff6640178c2d0525017174a688e2c1aef28f0a0130b26bd5554491f0da
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview ubuntu
C:\Users\GGG>
연습) 리눅스 종류 : centos 다운로드 받기
C:\Users\GGG>docker pull centos
Using default tag: latest
latest: Pulling from library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Image is up to date for centos:latest
docker.io/library/centos:latest
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview centos
C:\Users\GGG>
예제 1) centos:7 을 이미지 다운로드하고 컨테이너로 실행해보세요
# C:\Users\GGG>docker pull centos:latest // 최신버전은 생략가능 #
C:\Users\GGG>docker pull centos:7 // 7버전이라는 뜻
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview centos:7
C:\Users\GGG>
* 필요없는 이미지 삭제 : Containers 삭제 -> Images 삭제
2) 컨테이너로 실행 : docker run 명령어옵션
docker run : 컨테이너 실행 명령어(최초 실행)
cf) java 명령도 java.hello
ex) docker run -it --name test1 centos:7 bash
<옵션>
-it : 도커 컨테이너 실행 후 바로 접속하라는 옵션 : 그래서 attach가 필요없음
--name : 컨테이너 별명(별칭) 붙이기 옵션
centos:7 : 실행할 이미지명
bash : 사용할 셀 환경 선택(csh 셀, sh 셀, bash 셀 등, 생략가능)
예제 1) centos:7 을 컨테이너로 실행해 보세요
C:\Users\GGG>docker run -it --name test1 centos:7 bash
[root@159cfe85af77 /]#
6. 실행중인 컨테이너 상태 보기(목록보기) : docker ps -a (ps : process status)
1) 도커 데스크탑 - containers 탭 클릭 - 목록 보임
2) docker ps -a : 모든 컨테이너 목록 보기 ( -a : 실행/중지 된 모든(all) 컨테이너 보기 옵션)
C:\Users\GGG>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159cfe85af77 centos:7 "bash" 19 minutes ago Exited (0) 51 seconds ago test1
735ca23444ae centos:7 "/bin/bash" 20 minutes ago Exited (0) 20 minutes ago wonderful_jemison
488a2397e634 kangtaegyung/ubuntu-win "/bin/bash" 2 days ago Exited (0) 16 hours ago ubuntu
C:\Users\GGG>
3) docker ps : 실행중인 컨테이너 목록 보기
C:\Users\GGG>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
C:\Users\GGG>
7. 컨테이너 로그 출력 : docker logs 컨테이너명(containerID, 별명)
로그(log) : 이력을 남기는 것(에러, 정상출력메세지, 로그인 이력 등)
C:\Users\GGG>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159cfe85af77 centos:7 "bash" 30 minutes ago Exited (0) 12 minutes ago test1
735ca23444ae centos:7 "/bin/bash" 31 minutes ago Exited (0) 31 minutes ago wonderful_jemison
488a2397e634 kangtaegyung/ubuntu-win "/bin/bash" 2 days ago Exited (0) 16 hours ago ubuntu
C:\Users\GGG>docker logs test1
[root@159cfe85af77 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@159cfe85af77 /]# pwd
/
[root@159cfe85af77 /]# exit
exit
C:\Users\GGG>
8. 컨테이너 시작하기
1) 도커 데스크탑 - container 탭 클릭 - Action 아이콘 클릭
2) docker start 컨테이너명
C:\Users\GGG>docker ps -a // 실행중인 컨테이너 목록 확인
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159cfe85af77 centos:7 "bash" 54 minutes ago Exited (137) 9 seconds ago test1
735ca23444ae centos:7 "/bin/bash" 55 minutes ago Exited (0) 55 minutes ago wonderful_jemison
488a2397e634 kangtaegyung/ubuntu-win "/bin/bash" 2 days ago Exited (0) 16 hours ago ubuntu
C:\Users\GGG>docker start test1 // 컨테이너 시작
test1
C:\Users\GGG>docker ps -a // 실행중인 컨테이너 목록 확인
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159cfe85af77 centos:7 "bash" 55 minutes ago Up 36 seconds test1
735ca23444ae centos:7 "/bin/bash" 56 minutes ago Exited (0) 56 minutes ago wonderful_jemison
488a2397e634 kangtaegyung/ubuntu-win "/bin/bash" 2 days ago Exited (0) 16 hours ago ubuntu
C:\Users\GGG>
9. 컨테이너 접속하기 : 실행된 컨테이너만 접속가능 : docker attach 컨테이너명
예제) test1 실행하고 컨테이너 접속하기
C:\Users\GGG>docker attach test1
[root@159cfe85af77 /]#
연습) ubuntu:latest 리눅스 이미지를 다운로드 받고 컨테이너에 접속에 보세요, 별명은 test2로 작성
1) ubuntu:latest 이미지 다운로드
# docker 명령어는 윈도우 명령프롬프트에서 실행
# C:\Users\GGG> => 윈도우 프롬프트
# [root@c7e8428c1b32 /]# => 리눅스 프롬프트 (#, $)
2) ubuntu:latest 이미지 컨테이너로 실행하기
# 사용법) docker run -it --name 별명 이미지명 셀(생략가능)
[root@159cfe85af77 /]# docker pull ubuntu:latest // 리눅스 상태에서 docker 명령어 안됨
bash: docker: command not found
[root@159cfe85af77 /]# exit
exit
C:\Users\GGG>docker pull ubuntu:latest // 윈도우 상태에서 docker 명령어 작성
latest: Pulling from library/ubuntu
Digest: sha256:f9d633ff6640178c2d0525017174a688e2c1aef28f0a0130b26bd5554491f0da
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview ubuntu:latest
C:\Users\GGG>docker run -it --name test2 ubuntu:latest bash // 컨테이너 접속
root@26584abd435c:/#
10. 컨테이너 중지
1) 도커 데스크탑 - container 탭 클릭 - Action 아이콘(사각형) 클릭
2) docker stop 컨테이너명
예제 1) ubuntu 중지해 보세요
root@26584abd435c:/# docker desktop ubuntu
bash: docker: command not found
root@26584abd435c:/# exit
exit
C:\Users\GGG>docker stop test2 // 윈도우 명령 프롬프트에서 실행
test2
C:\Users\GGG>
3) 강제 중지 사용법 : docker kill 컨테이너명
예제 2) ubuntu 강제 중지 하세요
C:\Users\GGG>docker kill test2
test2
C:\Users\GGG>
11. 도커 이미지 목록 보기 : docker images
1) 도커 데스크탑 - 이미지 탭 클릭
2) 명령어 사용 : docker images
C:\Users\GGG>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kangtaegyung/ubuntu-win latest fd6e87cdbbbc 2 days ago 265MB
ubuntu latest 3db8720ecbf5 9 days ago 77.9MB
centos 7 eeb6ee3f44bd 2 years ago 204MB
centos latest 5d0da3dc9764 2 years ago 231MB
C:\Users\GGG>
12. docker hub(도커 허브) : 원격 레포지토리(repository_저장소)
1) 이미지 업로드
(1) docker login : 도커허브 가입(계정, 암호)
C:\Users\GGG>docker login
Authenticating with existing credentials...
Login Succeeded
C:\Users\GGG>
(2) docker push 계정명/이미지명:버전 : 업로드 명령어
- 1) 계정명이 붙은 이미지명으로 변경 : docker tag 이미지명 계정명/이미지명
C:\Users\GGG>docker tag ubuntu yujeong0516/ubuntu
C:\Users\GGG>
- 2) 도커 이미지 업로드 : docker push 계정명/이미지명:버전
C:\Users\GGG>docker push yujeong0516/ubuntu
Using default tag: latest
The push refers to repository [docker.io/yujeong0516/ubuntu]
d101c9453715: Mounted from library/ubuntu
latest: digest: sha256:bf95d30007470fc826d727620d7d6a43f3abcd02ea0a0039814346e38337380e size: 529
C:\Users\GGG>
2) 올린 이미지 삭제
13. 컨테이너 삭제 : docker rm 컨테이너명(컨테이너ID, 별명)
1) 도커 데스크탑 - containers 탭 - 목록에서 1개 선택 후 휴지통 아이콘 클릭
2) 명령어 : docker rm 컨테이너명(컨테이너ID, 별명)
예제 1) centos:7 컨테이너를 삭제해 주세요
C:\Users\GGG>docker rm centos:7 // 이미지명 말고 컨테이너명으로 하기
Error response from daemon: No such container: centos:7
C:\Users\GGG>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26584abd435c ubuntu:latest "bash" About an hour ago Exited (137) 55 minutes ago test2
159cfe85af77 centos:7 "bash" 3 hours ago Exited (127) About an hour ago test1
735ca23444ae centos:7 "/bin/bash" 3 hours ago Exited (0) 3 hours ago wonderful_jemison
488a2397e634 kangtaegyung/ubuntu-win "/bin/bash" 2 days ago Exited (0) 18 hours ago ubuntu
C:\Users\GGG>docker rm test1
test1
C:\Users\GGG>
연습 1) 명령어로 test2 컨테이너도 삭제해 주세요
C:\Users\GGG>docker rm test2
test2
C:\Users\GGG>d
14. 이미지 삭제
1) 도커 데스크탑 - images 탭 클릭 - 목록 선택 후 휴지통 클릭 (다만! 컨테이너에서 먼저 삭제가 되어있어야함)
2) 명령어 사용 : docker rmi 이미지명:버전(태그)[이미지ID]
(다만! 컨테이너에서 먼저 삭제가 되어있어야함. 컨테이너 상태에 Exited 말고 아예 휴지통으로 삭제해야함)
예제 1) centos:7 이미지 삭제하기
C:\Users\GGG>docker rmi centos:7
Untagged: centos:7
Untagged: centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
C:\Users\GGG>
연습) 계정명/ubuntu 이미지 삭제하기(명령어로 해보세요)
C:\Users\GGG>docker rmi yujeong0516/ubuntu
Untagged: yujeong0516/ubuntu:latest
Untagged: yujeong0516/ubuntu@sha256:bf95d30007470fc826d727620d7d6a43f3abcd02ea0a0039814346e38337380e
C:\Users\GGG>
1. OS : 기본적으로 컴퓨터에 1개만 설치 가능
2. 활용 : 리눅스 OS 설치가능, db도 간단 설치 가능, 업무용 프로그램도 도커로 제작가능 등
3. 도커구조
1) 이미지 : 다운받은 프로그램 등을 의미
2) 컨테이너 : 다운받은 프로그램을 실제 실행하는 것을 의미 : 이미지를 다운받아서 컨테이너로 실행(1:1)
- 컨테이너는 독립된 공간의 프로그램
- 바깥(윈도우 운영체제)과 격리되어 있어 기본적으로 통신이 안됨(리눅스 - 윈도우 : 별개)
4. 도커에서 hello-world 이미지(컨테이너) 실행하기 : docker run 컨테이너명 (컨테이너 없을때 최초)
run : 이미지 다운받고 최초 컨테이너 실행 할 때 사용
컨테이너가 실행된 이후로는 start, attach 왔다갔다하면서 사용
5. 도커 실행
1) 명령어 실행해서 받기 (도커테스크탑O) : docker pull 이미지명
2) 컨테이너로 실행 (도커테스크탑O) : docker run -it --name test1 centos:7 bash
6. 실행중인 컨테이너 상태 보기(목록보기) (도커테스크탑O) : docker ps -a, docker ps
7. 컨테이너 로그 출력 : docker logs 컨테이너명(containerID, 별명)
8. 컨테이너 시작하기 (도커테스크탑O) docker start 컨테이너명
9. 컨테이너 접속하기 : 실행된 컨테이너만 접속가능 : docker attach 컨테이너명
10. 컨테이너 중지 (도커테스크탑O) : docker stop 컨테이너명 / 강제 중지 사용법 : docker kill 컨테이너명
11. 도커 이미지 목록 보기 (도커테스크탑O) : docker images
12. docker hub(도커 허브)
(1) docker login : 도커허브 가입(계정, 암호)
1) 계정명이 붙은 이미지명으로 변경 : docker tag 이미지명 계정명/이미지명
2) 도커 이미지 업로드 : docker push 계정명/이미지명:버전
13. 컨테이너 삭제 (도커테스크탑O) : docker rm 컨테이너명(컨테이너ID, 별명)
14. 이미지 삭제 (도커테스크탑O) : docker rmi 이미지명:버전(태그)[이미지ID]
<컨테이너 시작과 컨테이너 접속의 차이점>
* 컨테이너 시작
- run : 컨테이너 없을 때 최초 한번 (-it이 붙으면 : attach까지 되는거라 attach 또 쓸필요 없음)
- start : 컨테이너 현재 run으로 만들어진 상태에서 start. 명령프롬프트가 윈도우에 있는 상태.
리눅스에 접속하는게 아닌 서버만 킨것. 컴퓨터 전원만 킨것과 동일
* 컨테이너 접속
- attach : 전원을 켰다면, 실제 접속은 attach로 해야함
- 일단 run은 컨테이너를 시작시키고, 명령이 끝나면 빠져나간다.
run : 이미지만 다운받았을 때, 새로운 컨테이너를 생성해 실행하는 명령어. 최초 한번만 실행
- exec : 실행 중인 컨테이너에 명령어를 전달(외부 -> 내부)
- attach : 실행 중인 컨테이너에 직접 들어가 명령어를 실행 (내부 접근)
attach는 컨테이너 내부에 다시 접근하게 해주는 명령어이다.
<리눅스 명령프롬프트와 윈도우 명령프롬프트의 차이점>
# : 리눅스 (root 계정)
$ : 리눅스 (oracle 계정)
> : 윈도우
docker는 docker desktop 이 깔려있는 윈도우 명령프롬프트에서 실행해야함! 리눅스에서 실행하면 안됨.
리눅스에는 docker desktop이 없음
그래서 C:\Users\GGG> 가 되어있는 상태에서 무조건 실행해야된다.
<이미지명, 컨테이너명>
이미지명은 최초 이미지 다운받을쓰고, 컨테이너가 생성이 된 후에는 컨테이너명으로 쓰기.
그리고 docker run 컨테이너명에서 이미지명을 쓰기도 한다. 근데 대부분은 다 컨테이너명(=별명)을 씀