Docker 명령어 정리

컨테이너 명령어

컨테이너 생성하기

1
2
3
4
$ docker run -d {image id|name} {CMD} {parameter}

#ex
$ docker run -d pcloudesire/tomcat:7-jre7 -p 8090:8080 /run.sh
옵션 설명
-i –interactive 컨테이너의 표준 입력(stdin)을 활성화. (주로 -it 함께 사용)
-t –tty tty(가상 터미널)을 할당. 리눅스에 키보드를 통해 표준 입력(stdin)을 전달할 수 있게한다. (주로 -it 함께 사용)
–name 컨테이너 이름을 지정.
-d –detach 컨테이너를 백그라운드로 실행.
–rm docker run 명령어가 끝나면, 컨테이너 자동 삭제.
-p –publish 호스트와 컨테이너의 포트를 연결 (포트포워딩). -p <호스트 포트="">:<컨테이너 포트=""> ex) -p 80:8888 - 호스트에 8888로 접속하면, 컨테이너 내부의 80포트로 자동 접속.
-v –volume 호스트와 컨테이너의 디렉토리 연결(마운트) -v <호스트 절대경로="">:<컨테이너 절대경로=""> ex) -v /Users:/usr. - 컨테이너 /usr에 저장하는 파일은 호스트의 /Users 디렉토리에 저장.
–restart 컨테이너 종료시, 재시작 정책 설정 –restart=”always” : 항상 재시작 –restart=”on-failure” : 종료 스테이터스가 0이 아닐 때 재시작 * –rm 옵션과 –restart 옵션은 동시에 사용할 수 없습니다.
–privileged 컨테이너 안에서 호스트의 리눅스 커널 기능을 모두 사용

컨테이너 실행하기

1
2
3
$ docker start {container id|name}
$ docker stop {container id|name}
$ docker restart {container id|name}

모든 컨테이너 확인하기

1
$ docker ps -a

컨테이너 내부 bash 쉘 진입

1
2
3
4
$ docker exec -it {container id|name} /bin/bash

#ex
$ docker exec -it web1 /bin/bash

컨테이너 정보 확인

1
2
3
4
$ docker inspect {container id|name}

#ex
$ docker inspect web1

컨테이너에 연결하기

1
2
3
4
$ docker attach {container id|name}

#ex
$ docker attach web1

컨테이너 로그 출력

1
2
3
4
$ docker logs -f {container id|name}

#ex
$ docker logs -f web1

이미지 수정하기

이미지 목록 확인하기

1
$ docker image ls

이미지 수정하기

현재 구동중인 컨테이너 쉘에 접속하여 원하는 파일을 변경한 뒤 변경한 컨테이너를 대상으로 이미지 파일에 커밋한다.

1
2
3
4
$ docker commit --change='CMD {컨테이너 시작 시 적용할 커맨드}' {modified container id|name} {image name}

#ex
$ docker commit --change='CMD ["/run.sh"]' web1 cloudesire/tomcat-mariadb-webapp

네트워크 명령어

네트워크 주소 확인하기

1
2
3
4
5
6
7
sudo ip addr show docker0 #도커 네트워크에 할당된 IP확인
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:e6:19:ee:27 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:e6ff:fe19:ee27/64 scope link
       valid_lft forever preferred_lft forever

네트워크 목록 확인하기

1
$ docker network inspect ls

네트워크 생성하기

1
2
3
4
$ docker network create {network name}

#ex
docker network create myNetwork

네트워크 정보 확인하기

1
2
3
4
$ docker network inspect {network name}

#ex
$ docker network inspect myNetwork

컨테이너끼리 커스텀 네트워크로 연결

1
2
3
4
5
$ docker network connet {network name} {container id|name}

#ex
$ docker network connect myNetwork web1
$ docker network connect myNetwork db1

컨테이너간 통신

bridge 이용

bridge 모드로 컨테이너에 부여된 IP를 확인하고, 같은 네트워크안에 묶인 IP와 통신 가능

기본적으로 docker 는 디폴트 네트워크에 모든 컨테이너를 연결 함

같은 네트워크에 연결 되었는지 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
8f51e48c7983        bridge              bridge              local
21cf1de9fbbd        docker_default      bridge              local
1c613b5b4259        host                host                local

$ docker network inspect docker_default
[
    {
        "Name": "docker_default",
        "Id": "21cf1de9fbbd3f9dee2b432803985b5280df95a04cb49019fc071a517c785086",
        "Created": "2020-10-21T05:08:01.128636231Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0362edb6b43156a61190049caf6a8dac01b71a8721774966a563d5f758e2566e": {
                "Name": "webapp1",
                "EndpointID": "d5e460ee03bcf3d9be15d5a5db7976334aabccbf5baa2b7877b63781755d91c7",
                "MacAddress": "02:42:ac:12:00:08",
                "IPv4Address": "172.18.0.8/16",
                "IPv6Address": ""
            },
            "9b55100f4d3c01c1e0d5d68bacb3f9679bf1718ee54a90dbae078b78e71739ba": {
                "Name": "db1",
                "EndpointID": "6c129dc79e2131b01e7c43e5f08c4e34d08b048a58fc98c2776de33ff4a2c9de",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "docker"
        }
    }
]

네트워크 및 IP지정하여 컨테이너 생성

1
$ docker run -it --rm --network docker_default --ip 172.18.0.9 -p 8281:8080 -d cloudesire/tomcat:latest /run.sh

host 이용

network-mode 를 host 로 지정할 경우 호스트의 설정들을 모두 따르므로 port forwarding 은 동작하지 않음

1
$ docker run --net=host {image id|name} {container id|name}

docker-compose 구성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version : '3'
services :
        {컨테이너 이름} :
#ex     test_maria_db :
                image : {이미지 이름}
#ex             image : mariadb:latest
                network-mode : host
                environment :
                        MYSQL_ROOT_PASSWORD : {ROOT 비밀번호}
                        MYSQL_DATABASE : {DB 이름}
                        MYSQL_USER : {DB 접속 유저 이름}
                        MYSQL_PASSWORD : {DB 접속 유저 비밀번호}
                volumes :
                      - {src path}:{dest path}                
#ex                   - /home/djcho/docker/shared_volumes/mariadb_10_0/dbdata:/var/lib/mysql
                networks:
                        default: #network 지정
                                ipv4_address: 172.18.0.5 #ip지정
        test_server_webapp :
                image : cloudesire/tomcat:latest
                ports :
                      - "{src port}:{dest port}"                
#ex                   - "8280:8080"
#ex                   - "8643:8443"
                volumes :
                      - /home/djcho/docker/shared_volumes/tomcat/webapps:/tomcat/webapps
                      - /home/djcho/docker/shared_volumes/tomcat/my_files:/tomcat/my_files
                environment:
                      JAVA_OPTS : "-Dspring.profiles.active=dev-jndi  -Doracle.jdbc.timezoneAsRegion=false"
                networks:
                        default:
                                ipv4_address: 172.18.0.5

컨테이너간 통신 여부 확인하기

1
2
3
4
5
6
7
8
9
10
$ docker-compose exec {service1 name} ping {service1 name}

#ex
$ docker-compose exec test_server_webapp ping test_maria_db
PING test_server_webapp (172.18.0.8) 56(84) bytes of data.
64 bytes from docker_test_server_webapp_1.docker_default (172.18.0.8): icmp_seq=1 ttl=64 time=0.092 ms
64 bytes from docker_test_server_webapp_1.docker_default (172.18.0.8): icmp_seq=2 ttl=64 time=0.077 ms
64 bytes from docker_test_server_webapp_1.docker_default (172.18.0.8): icmp_seq=3 ttl=64 time=0.075 ms
64 bytes from docker_test_server_webapp_1.docker_default (172.18.0.8): icmp_seq=4 ttl=64 time=0.073 ms
64 bytes from docker_test_server_webapp_1.docker_default (172.18.0.8): icmp_seq=5 ttl=64 time=0.079 m

Etc 카테고리 내 다른 글 보러가기

댓글남기기