컨테이너는 이미지를 실행하면 자동으로 생성이 된다. 즉 실행하면서 생성이 된다는 것이다.
C:\Users\PC>docker run -it --name test1 centos:7 bash
[root@4cae0846704a /]#
다음과 같이 리눅스 처럼 #프롬프트가 생긴것을 볼수 있다. 이렇게 되면 컨테이너가 실행된 것이다.
docker run은 컨테이너 최초 실행 명령어이다. 하지만 이걸로 바로 실행이 되지 않고 여러 옵션을 넣어주어야한다.
기본 명령어에 추가적인 기능을 부여하는 것이 옵션이다.
목록을 보는 방법에는 두가지가 있다.
도커 데스킅탑에서 볼 수 있고, 리눅스 환경에서는 도커 데스크탑을 확인 할 수 없으니 명령어로 해야한다.
C:\Users\PC>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
현재 실행중인 컨테이너가 없어서 목록이 없다.
C:\Users\PC>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cae0846704a centos:7 "bash" 19 minutes ago Exited (0) 44 seconds ago test1
2a6d2173023a centos:7 "/bin/bash" 20 minutes ago Exited (0) 20 minutes ago stupefied_greider
8fd27fab22d2 centos:7 "/bin/bash" 2 days ago Exited (0) 2 days ago vigorous_haslett
345d3756f1ff kangtaegyung/ubuntu-win "/bin/bash" 4 days ago Exited (0)
컨테이너 id을 외우기가 힘드니 이름(이름은 고유해야한다.)을 붙여주는 것이 좋다. command는 사용하는 셀의 종류이고, 현재 상태와 만들어진 시간, 별명, 이미지명을 알 수 있다.
이력을 남기는 것으로 실행이나 에러, 정상출력메세지, 로그인이력등을 파일에 남긴다. 언제 이런 일들이 일어났는지를 알아야하므로 항상 로그를 남겨야한다.
해당 컨테이너의 실행이력을 볼 수 있다.
C:\Users\PC>docker logs test1
[root@4cae0846704a /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
[root@4cae0846704a /]# [wd
bash: [wd: command not found
[root@4cae0846704a /]# pws
bash: pws: command not found
[root@4cae0846704a /]# pwd
/
[root@4cae0846704a /]# exit
exit
아래에 test1에서 우리가 한 실행들의 기록을 볼 수 있다.

컨테이너 탭에서 네모 버튼을 눌러주면된다.
컨테이너를 종료하는 것이 아닌 일시 중지 시켜보자
C:\Users\PC>docker stop test2
test2
컨테이너명이 뜨면 잘 된것이다.
컨테이너가 정상적으로 중지가 안 될 경우(예를 들어 다른 사람이 리눅스를 사용하고 있을경우 ) 강제적으로 중지를 시키는 명령어가 있다.
C:\Users\PC>docker kill test2
test2
컨테이너명이 뜨면 잘 된거이고, 일반중지보다 중지가 빠르다.
중지된 컨테이너를 다시 시작해보자.
도커데스크탑 - container 탭 클릭 - action아이콘 클릭

C:\Users\PC>docker start test1
test1
컨테이너 이름이 뜨면 성공한 것이다.
접속은 실행중인 컨테이너에만 가능하다.
C:\Users\PC>docker attach test1
[root@4cae0846704a /]#
플롬프트가 #으로 바뀌면서 리눅스로 접속이 된다.
근데 컨테이너를 만들 때 -it를 해주면 attach로 따로 접속을 안해도 된다.
이것도 데스크탑에서 볼 수도있고 명령어로도 가능하다. 데스크탑은 간단하니 스킵하고 며령어를 알아보자.
C:\Users\PC> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kangtaegyung/ubuntu-win latest fd6e87cdbbbc 4 days ago 265MB
ubuntu latest 3db8720ecbf5 11 days ago 77.9MB
centos 7 eeb6ee3f44bd 2 years ago 204MB
이렇게 현재 컴퓨터에서 가지고 있는 이미지를 보여준다.
이미지도 이름과 id를 가지는데 id를 사용하는것도 가능하다.
도커허브에 나의 이미지를 올리고 다른 사람이 사용하게 업로드를 할 수 있다. 또한 손쉽게 보관이 가능하다.
이미지를 올리기 위해서는 로그인이 필수적이다.
이미지를 올리기 위해서는 로그인이 필수적이다. 로그인도 명령프롬프트로 가능하다.
C:\Users\PC>docker login
Authenticating with existing credentials...
Login Succeeded
Login Succeeded이 뜨면 성공한 것이다.
계정명을 해주지 않으면 이름이 겹치기 때문에 고유성을 해친다. 그래서 반드시 내계정의 이름을 붙여주어야한다. 그래서 올리기 전에 계정명이 붙은 이미지명으로 이미지명을 바꾸어주어야한다.
C:\Users\PC>docker tag ubuntu bku1/ubuntu
C:\Users\PC>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kangtaegyung/ubuntu-win latest fd6e87cdbbbc 4 days ago 265MB
bku1/ubuntu latest 3db8720ecbf5 11 days ago 77.9MB
ubuntu latest 3db8720ecbf5 11 days ago 77.9MB
centos 7 eeb6ee3f44bd 2 years ago 204MB
새로운 bku1/ubuntu라는 이름의 ubuntu이미지가 생긴 것을 확인 할 수 있다. 크기와 이미지 id, 생성날짜가 같은것을 보니 복사본이 생기는 것으로 볼 수 있다.
C:\Users\PC>docker push bku1/ubuntu
Using default tag: latest
The push refers to repository [docker.io/bku1/ubuntu]
d101c9453715: Mounted from library/ubuntu
latest: digest: sha256:bf95d30007470fc826d727620d7d6a43f3abcd02ea0a0039814346e38337380e size: 529
docker hub의 repository 탭에서 확인이 가능하다.

잘 업로드 된것을 확인 할 수 있다.
내가 올린 이미지를 클릭해서 들어가면 settings 탭이 있다. settings에서 제일 밑에 보면 deledt repository가 있는데 여기서 삭제를 하면된다.
컨테이너를 삭제하는 방법도 두가지가 있다. 데스크탑과 명령어. 여기서도 데스크탑은 스킵하고 명령어만 알아보자.
여기서 rm은 remove의 약자이다.
C:\Users\PC>docker rm test2
test2
컨테이너명이 뜨면 삭제가 잘 된것이다.

데스크탑에서도 test2가 잘 사라진 것을 볼 수 있다.
이미지도 마찬가지로 두가지 방법이고 명령어만 알아보자
C:\Users\PC>docker rmi centos:7
Untagged: centos:7
Untagged: centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
centos:7을 삭제했다.

데스크탑에도 잘 삭제가 된 것을 확인 할 수 있다.
컨테이너를 먼저 삭제하고 이미지를 삭제해야한다. 이미지를 가진 컨테이너들이 남아있으면 오류가 발생할 수도 있다.
유틸리티 프로그램을 설정할때는 관리자프로그램에 접근을 해야한다. apt-get을 해주면 관리자프로그램에 접근할 수 있다.


사이트가 잘 운영중인지 핑을통해 알아보는 툴과 네트워크 주소 관리하는 툴을 설치해보자.
# apt-get install -y iputils-ping
# apt-get install -y net-tools
# apt-get install -y iproute2
외부(공인)ip는 회선을 깔면 하나씩 부여된다. 하지만 ip하나 당 하나의 기기에만 연결이 가능하다. 이 때 여러개의 기기에 네트워크를 연결하려면 ip의 갯수를 늘려야하고 이건 돈이 많이 드니까 내부ip라는 개념을 이용한다. 외부 ip를 쪼개서 각각의 기기에 ip를 부여하는 것이다. 외부 ip는 255로 시작하고ㅡ, 내부ip는 시작을 192나 172로 시작한다.
웹을 만들면 ip를 확인해야하는 상황이 많이 생긴다. 리눅스에서 ip를 확인하는 방법을 알아보자.
여기서 eth0는 기본 하드웨어인 이더넷(ethernet) 네트워크 카드이다. 여기에 ip번호를 설정을 한다. 이게 없으면 ip를 부여받을 수 없다.

1이 내부이고 2가 외부이다.
docker의 컨테이너는 os로 리눅스를 사용한다. 하지만 우리는 윈도우나 ios를 os로 많이 사용하는데 이때 리눅스를 사용하기 docker desk탑이 우리의 os에 가상공간을 만들어서 리눅스를 실행할 수 있는 os를 만든다음 거기서 컨테이너를 실행하는 것이다.

이런 구조로 실행이 된다.
이미지를 만들때는 이미 있는 이미지(샘플)를 베이스로 선택해서 만들어야한다. 이미지제작에는 os가 필요한데 보통 리눅스를 사용한다.
리눅스의 종류는 2가지가 있다. 데비안계열은 무료이고, 레드햇계열은 상용과 무료가 있다.
docker파일은 이미지 제작 처리 순서를 작성한 파일로, docker가 이 파일을 읽어서 이미지를 만든다.
1. 기본 이미지 선택(os, os가 설치된 프로그램 등)
2. 애플리케이션 코드와 설정 파일 복사
3. 최초 컨테이너 실행시 자동 실행할 명령어 작성(생략가능)
컨테이너를 실행하면 파일을 읽어서 화면에 출력하는 이미지와 컨테이너를 만들어보자.
VScode에서 Docker이라는 파일을 만들고 아래의 코드를 작성하면된다. 파일의 이름은 Docker로 항상 이어야한다.
# 베이스 이미지 선택
FROM ubuntu:18.04
# 도커 컨테이너 내부에서 실행할 명령어
# 리눅스 업데이트 실행
RUN apt-get update -y
# 윈도우파일인 /message.txt => 리눅스/message.txt에 복사
ADD ./message.txt /message.txt
# 컨테이너 실행후에 1번 실행할 명령어 출력
CMD cat /message.txt
이걸 누르면 경로로 바로 갈 수 있다.C:\Users\PC\Desktop\class_things\04_MSA\02_docker\build>docker build --tag hello .
-- tag는 빌드될 파일에 이름을 부여하는 옵션이다. 그리고 docker파일이 현재 위치에 있으므로"."을 해주었다.
결과
C:\Users\PC\Desktop\class_things\04_MSA\02_docker\build>docker build --tag hello .
빌드내용을 보여주며 에러가 없으면 빌드 성공이다.
이제 만든 이미지 파일을 실행해보자.
C:\Users\PC\Desktop\class_things\04_MSA\02_docker\build>docker run hello
hello world
우리가 원하는 hello world가 출력되는 파일이 잘 실행된다. docker desktop에서도 이미지와 컨테이너가 만들어졌는지 확인이 가능하다.