상황 조건
네트워크 gateway : 172.39.0.1
네트워크 subnet : 172.39.0.0/21
네트워크 이름 : edge_network_hall
사용할 네트워크 driver : bridge
"""
1. 도커 네트워크 만들고 (사용할 driver 정함)
docker network create --gateway 172.39.0.1 --subnet 172.39.0.0/21 --driver bridge edge_network_hall
"""
어쨌든 container를 동작 시키려면 image 파일이 있어야한다.
image 파일을 만드는 방법은 두가지이다.
1. dockerhub에서 다운 받는다 ex) " docker pull 이미지:이미지버전 "
2. dockerfile 로 이미지구성을 정의한 다음, 이미지생성
상황 조건
도커 네트워크 : edge_network_hall
도커파일 : Dockerfile
도커 이미지 : 도커파일로 만든 이미지 사용(build) : fake_module_test_1
도커컨테이너 : fake_module_test_1_container
도커컨테이너 ip : 172.39.0.10
설명 : fake_module_test_1_container 라는 도커컨테이너를 백그라운드로 상시 실행 하려고 함
"""
1. 도커 이미지 만들고 (Dockerfile로)
docker build -t fake_module_test_1 -f Dockerfile .
docker build -t 태그명(이름:v1.0) -f 도커파일 경로
도커파일형식은 '_' 가 아니라 '.' 을 써야함 . 따라서 "v30.Dockfile" 이런식으로 네이밍해야함
실행하려면 docker build -t liam0906/ubuntu20_pytho3.8:v4.0 -f v30.Dockfile .
2. 도커 컨테이너 만들고 (docker이미지+네트워크 지정해서)
docker run -d --name fake_module_test_1_container --restart=always --net edge_network_hall --ip 172.39.0.10 fake_module_test_1
3. 도커 컨테이너 재실행
docker container restart fake_module_test_1_container
4. 도커 컨테이너 접속 (/bin/bash 로 shell 지정)
docker exec -it fake_module_test_1_container /bin/bash
docker exec -it 컨테이너ID /bin/bash , /bin/bash로 컨테이너에 접속 // ps에 안뜨면 ps -a로 컨테이너ID확인 후 start 시켜줘야함
"""
상황 조건
도커 네트워크 : edge_network_hall
도커파일 : Dockerfile
도커 이미지 : 도커파일로 만든 이미지 사용(build) : edge_hall_image
도커컨테이너 : edge_hall_container
도커컨테이너 ip : 172.39.0.5
설명 : edge_hall_container 라는 도커컨테이너를 백그라운드로 상시 실행 하려고 함
"""
1. 도커 이미지 만들고 (Dockerfile로)
docker build -t edge_hall_image -f Dockerfile .
2. 도커 컨테이너 만들고 (docker이미지+네트워크 지정해서)
docker run -d --name edge_hall_container --restart=always --net edge_network_hall --ip 172.39.0.5 edge_hall_image
3. 도커 컨테이너 재실행
docker container restart edge_hall_container
4. 도커 컨테이너 접속 (/bin/bash 로 shell 지정)
docker exec -it edge_hall_container /bin/bash
docker exec -it 컨테이너ID /bin/bash , /bin/bash로 컨테이너에 접속 // ps에 안뜨면 ps -a로 컨테이너ID확인 후 start 시켜줘야함
"""
상황 조건
도커 네트워크 : edge_network_hall
도커파일 : 사용 X, docker hub에 있는 이미지 그대로 사용함
도커 이미지 : osrf/ros:foxy-desktop
도커컨테이너 : ros2_debug_test
도커컨테이너 ip : 172.39.0.100
설명 : ros2_debug_test 라는 도커컨테이너를 ROS2 토픽이나 srv 같은 메시지들 디버깅할 때 용이하게 하려고 씀( 필요할 때마다 한번씩 실행 하는 용도 )
"""
1. dockerhub에서 이미지 다운
docker pull osrf/ros:foxy-desktop
2. 다운받은 이미지파일 실행
docker run -it --name ros2_debug_test --net edge_network_hall --ip 172.39.0.100 osrf/ros:foxy-desktop
or
docker run -it --rm --name ros2_debug_test --net edge_network_hall --ip 172.39.0.100 osrf/ros:foxy-desktop
"""
-d 같은 경우엔 백그라운드로 실행명령
-it 같은 경우엔 한번 실행하는 경우
--rm : 도커이미지로 도커run을 하고 도커접속을 합니다. 도커 접속이 끊기면 자동으로 도커 컨테이너를 삭제(rm)합니다.
밑에 자세히 설명 함
3. docker 컨테이너 접속 후 접속나갈 시 컨테이너 종료 명령어
docker run -it --rm osrf/ros:foxy-desktop
상황 조건
도커 네트워크 : host
도커파일 : X
도커 이미지 : osrf/ros:foxy-desktop
도커컨테이너 : 지정 X, 자동생성
도커컨테이너 ip : 지정 X, 자동생성
설명 : ROS2 이미지를 사용해서 일회용 컨테이너 생성 후 , 컨테이너 상에서 GUI 화면을 띄워서 사용하고 싶을 때
$ xhost +
$ docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" osrf/ros:foxy-desktop
# rqt
이러면 foxy를 쓰는 도커 컨테이너에서 rqt를 킬시 호스트에서 GUI 열림
--volume 옵션은 밑에서 보면 알 수 있듯
호스트와 공유할 디렉터리를 설정하여 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장 하는 기능 rw ro 이런건 옵션
도커 옵션 설명
Docker run Option list
-a
--attach=[]: 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)를 연결합니다.
--attach=”stdin”
--add-host=[]: 컨테이너의 /etc/hosts에 호스트 이름과 IP 주소를 추가합니다.
--add-host=hello:192.168.0.10
-c
--cpu-shares=0: CPU 자원 분배 설정입니다. 설정의 기본 값은 1024이며 각 값은 상대적으로 적용됩니다.
--cpu-shares=2048처럼 설정하면 기본 값 보다 두 배 많은 CPU 자원을 할당합니다.
이 설정 값은 리눅스 커널의 cgroups에서 사용됩니다.
--cap-add=[]: 컨테이너에서 cgroups의 특정 Capability를 사용합니다. ALL을 지정하면 모든 Capability를 사용합니다.
--cap-add=”MKNOD” --cap-add=”NET_ADMIN”처럼 설정합니다. 모든 Capability 목록은 다음 링크를 참조하기 바랍니다.
http://linux.die.net/man/7/capabilities
--cap-drop=[]: 컨테이너에서 cgroups의 특정 Capability를 제외합니다.
--cidfile=””: cid 파일 경로를 설정합니다. cid 파일에는 생성된 컨테이너의 ID가 저장됩니다.
--cpuset=””: 멀티코어 CPU에서 컨테이너가 실행될 코어를 설정합니다.
--cpuset=”0,1”처럼 설정하면 첫 번째, 두 번째 CPU 코어를 사용합니다.
--cpuset=”0-3”처럼 설정하면 첫 번째 CPU 코어부터 네 번째까지 사용합니다.
-d
--detach=false: Detached 모드입니다. 보통 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행됩니다.
--device=[]: 호스트의 장치를 컨테이너에서 사용할 수 있도록 연결합니다. <호스트 장치>:<컨테이너 장치> 형식입니다.
--device=”/dev/sda1:/dev/sda1”처럼 설정하면 호스트의 /dev/sda1 블록 장치를 컨테이너에서도 사용할 수 있습니다.
--dns=[]: 컨테이너에서 사용할 DNS 서버를 설정합니다.
--dns=”8.8.8.8”
--dns-search=[]: 컨테이너에서 사용할 DNS 검색 도메인을 설정합니다.
--dns-search=”example.com”처럼 설정하면 DNS 서버에 hello를 질의할 때 hello.example.com을 먼저를 찾습니다.
-e
--env=[]: 컨테이너에 환경 변수를 설정합니다. 보통 설정 값이나 비밀번호를 전달할 때 사용합니다.
-e MYSQL_ROOT_PASSWORD=examplepassword
--entrypoint=””: Dockerfile의 ENTRYPOINT 설정을 무시하고 강제로 다른 값을 설정합니다.
--entrypoint=”/bin/bash”
--env-file=[]: 컨테이너에 환경 변수가 설정된 파일을 적용합니다.
--env-file=”/etc/environment”
--expose=[]: 컨테이너의 포트를 호스트와 연결만 하고 외부에는 노출하지 않습니다.
--expose=”3306”
-h
--hostname=””: 컨테이너의 호스트 이름을 설정합니다.
-i
--interactive=false: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다. 보통 이 옵션을 사
용하여 Bash에 명령을 입력합니다.
--link=[]: 컨테이너끼리 연결합니다. <컨테이너 이름>:<별칭> 형식입니다.
--link=”db:db”
--lxc-conf=[]: LXC 드라이버를 사용한다면 LXC 옵션을 설정할 수 있습니다.
--lxc-conf=”lxc.cgroup.cpuset.cpus = 0,1”
-m
--memory=””: 메모리 한계를 설정합니다. <숫자><단위> 형식이며 단위는 b, k, m, g를 사용할 수 있습니다.
--memory=”100000b”
--memory=”1000k”
--memory=”128m”
--memory=”1g”
--name=””: 컨테이너에 이름을 설정합니다.
--net=”bridge”: 컨테이너의 네트워크 모드를 설정합니다.
bridge: Docker 네트워크 브리지에 새 네트워크를 생성합니다.
none: 네트워크를 사용하지 않습니다.
container:<컨테이너 이름, ID>: 다른 컨테이너의 네트워크를 함께 사용합니다.
host: 컨테이너 안에서 호스트의 네트워크를 그대로 사용합니다. 호스트 네트워크를 사용하면 D-Bus를 통하여 호스트의 모든 시스템 서비스에 접근할 수 있으므로 보안에 취약해집니다.
-P
--publish-all=false: 호스트에 연결된 컨테이너의 모든 포트를 외부에 노출합니다.
-p
--publish=[]: 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출합니다. 보통 웹 서버의 포트를 노출할 때 주로 사용합니다.
<호스트 포트>:<컨테이너 포트> 예) -p 80:80
<IP 주소>:<호스트 포트>:<컨테이너 포트> 호스트에 네트워크 인터페이스가 여러 개이거나 IP 주소가 여러 개 일 때 사용합니다. 예) -p 192.168.0.10:80:80
<IP 주소>::<컨테이너 포트> 호스트 포트를 설정하지 않으면 호스트의 포트 번호가 무작위로 설정됩니다. 예) -p 192.168.0.10::80
<컨테이너 포트> 컨테이너 포트만 설정하면 호스트의 포트 번호가 무작위로 설정됩니다. 예) -p 80
--privileged=false: 컨테이너 안에서 호스트의 리눅스 커널 기능(Capability)을 모두 사용합니다.
--restart=””: 컨테이너 안의 프로세스 종료 시 재시작 정책을 설정합니다.
no: 프로세스가 종료되더라도 컨테이너를 재시작하지 않습니다. 예) --restart=”no”
on-failure: 프로세스의 Exit Code가 0이 아닐 때만 재시작합니다. 재시도 횟수를 지정할 수 있습니다. 횟수를 지정하지 않으면 계속 재시작합니다. 예) --restart=”on-failure:10”
always: 프로세스의 Exit Code와 상관없이 재시작합니다. 예) --restart=”always”
--rm=false: 컨테이너 안의 프로세스가 종료되면 컨테이너를 자동으로 삭제합니다. -d 옵션과 함께 사용할 수 없습니다.
--security-opt=[]: SELinux, AppArmor 옵션을 설정합니다.
--security-opt=”label:level:TopSecret”
--sig-proxy=true: 모든 시그널을 프로세스에 전달합니다(TTY 모드가 아닐 때도). 단 SIGCHLD, SIGKILL, SIGSTOP 시그널은 전달하지 않습니다.
-t
--tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.
-u
--user=””: 컨테이너가 실행될 리눅스 사용자 계정 이름 또는 UID를 설정합니다.
-v
--volume=[]: 데이터 볼륨을 설정입니다. 호스트와 공유할 디렉터리를 설정하여 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장합니다. 호스트 디렉터리 뒤에 :ro, :rw를 붙여서 읽기 쓰기 설정을 할 수 있으며 기본 값은 :rw입니다. 자세한 내용은 ‘6.4 Docker 데이터 볼륨 사용하기’를 참조하기 바랍니다.
<컨테이너 디렉터리> 예) -v /data
<호스트 디렉터리>:<컨테이너 디렉터리> 예) -v /data:/data
<호스트 디렉터리>:<컨테이너 디렉터리>:<ro, rw> 예) -v /data:/data:ro
<호스트 파일>:<컨테이너 파일> 예) -v /var/run/docker.sock:/var/run/docker.sock
--volumes-from=[]: 데이터 볼륨 컨테이너를 연결하며 <컨테이너 이름, ID>:<ro, rw> 형식으로 설정합니다. 기본적으로 읽기 쓰기 설정은 -v 옵션의 설정을 따릅니다. 자세한 내용은 ‘6.5 Docker 데이터 볼륨 컨테이너 사용하기’를 참조하기 바랍니다.
--volumes-from=”hello”
--volumes-from=”hello:ro”처럼 설정하면 데이터 볼륨을 읽기 전용으로 사용합니다.
--volumes-from=”hello:rw”처럼 설정하면 데이터 볼륨에 읽기 쓰기 모두 할 수 있습니다.
-w
--workdir=””: 컨테이너 안의 프로세스가 실행될 디렉터리를 설정합니다.
--workdir=”/var/www”
'협업툴,가상환경 정리 > docker_정리' 카테고리의 다른 글
docker compose 설명 (1) | 2022.09.23 |
---|---|
도커 볼륨 vs 바인드 마운트 (0) | 2022.09.21 |
5_docker 기본 명령어 정리 (이미지 삭제,종료,빌드, 런, 접속까지 + docker network 생성 + 로그확인) (0) | 2022.06.02 |
6_Dockerfile 코드 읽기~ 씡씡씡 (0) | 2022.06.02 |
4_EMQX 도커 컨테이너를 구성(브릿지말고 호스트에 구성한다) (0) | 2022.04.21 |
댓글