티스토리 뷰

docker run 은 Image 로 Container 를 생성하는 명령어이다.
docker run <옵션> <이미지> <명령> <매개 변수>

-i  (interactive) 컨테이너의 표준 입력(stdin)을 활성화. (주로 -it 함께 사용)
-t  (tty) tty(가상 터미널)을 할당.
리눅스에 키보드를 통해 표준 입력(stdin)을 전달할 수 있게한다. (주로 -it 함께 사용)
--name 컨테이너 이름을 지정.
-d  (detach) 컨테이너를 백그라운드로 실행.
-p  (publish) 호스트와 컨테이너의 포트를 연결 (포트포워딩).
-p <호스트 포트>:<컨테이너 포트>
ex) -p 80:8888  - 호스트에 8888로 접속하면, 컨테이너 내부의 80포트로 자동 접속.
-v  (volume) 호스트와 컨테이너의 디렉토리 연결(마운트)
-v <호스트 절대경로>:<컨테이너 절대경로>
ex) -v /Users:/usr. - 컨테이너 /usr에 저장하는 파일은 호스트의 /Users 디렉토리에 저장.

주로 쓰는 옵션만 정리해 보았다.

 

 

데이터베이스와 워드프레스 웹 서버 컨테이너를 연동해 워드프레스 기반 블로그 서비스를 만들어 보자.

docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7

 

// mysql을 사용하여 database 컨테이너를 생성

docker run -d --name wordpress --link wordpressdb:mysql -p 80 wordpress

// 워드프레스 이미지를 이용해 워드프레스 웹 서버 컨테이너를 생성한다. -p 옵션 에서 80을 입력했으므로 호스트의 포트 중 하나와 컨테이너의 80번 포트가 연결된다. 

 

이제 웹 브라우저로 [호스트 IP]:32768 에 접근 가능하다.


docker network ls

//도커에서 쓸 수 있는 네트워크를 확인

 

1)브리지 네트워크

docker network create --driver bridge mybridge
docker run -i -t --name mynetwork_container --net mybridge ubuntu:14.04

//기본적으로 사용하는 docker0을 사용하는 브리지 네트워크가 아닌 새로운 브리지 타입의 네트워크를 생성한 후, 컨테이너가 사용하도록 해 보자

docker network create --driver=bridge  --subnet=172.72.0.0/16 --ip-range=172.72.0.0/24 --gateway=172.72.0.1 my_custom_network

//다음과 같은 커스텀 네트워크도 만들 수 있다.

2)호스트 네트워크

docker run -i -t --name network_host --net host ubuntu:14.04

//컨테이너의 네트워크를 호스트 모드로 설정하면 컨테이너 내부의 애플리케이션을 별도의 포트 포워딩 없이 바로 서비스 할 수 있다.

3)논 네트워크

 docker run -i -t --name network_none --net none ubuntu:14.04

//네트워크를 사용하지 않는 컨테이너 생성

4)컨테이너 네트워크

--net 옵션으로 container를 입력하면 다른 컨테이너의 네트워크 네임스페이스 환경을 공유할 수 있다. 

docker run -i -t -d --name network_container_1 ubuntu:14.04
docker run -i -t -d --name network_container_2 --net container:network_container_1 ubuntu:14.04

하면 network_container_2의 네트워크 세부사항이 network_container_1과 똑같다.

 

※ docker exec network_container_1 ifconfig

※ docker exec network_container_2 ifconfig

docker run -i -t -d --name net_lhs_con1 --net mybridge --net-alias lhs ubuntu:14.04
docker run -i -t -d --name net_lhs_con2 --net mybridge --net-alias lhs ubuntu:14.04
docker run -i -t -d --name net_lhs_con3 --net mybridge --net-alias lhs ubuntu:14.04

 

브리지 타입의 네트워크와 run 명령어의 —net-alias 옵션을 함께 쓰면 특정 호스트 이름으로 컨테이너 여러 개에 접근할 수 있다. 

docker run -i -t --name net_alias_ping --net mybridge ubuntu:14.04
root@?????????:/# ping –c 4 lhs
root@?????????:/# apt-get update
root@?????????:/# apt-get install dnsutils
root@?????????:/# dig lhs


컨테이너 3개의 IP로 각각(??) ping 이 전송된 것을 확인할 수 있다.


도커 이미지

특정 개발 환경을 직접 구축한 뒤 사용자만의 이미지를 직접 생성해야 할 경우, 컨테이너 안 에서 작업한 내용을 이미지로 만들어보자

 docker run -i -t --name commit_test ubuntu:14.04 

   echo test_first! >> first
docker commit -a "lhs0731" -m "my first commit" commit_test commit_test:first

//만든 컨테이너로 이미지로 만든다.

//-a 옵션은 author를 뜻하며, -m은 이미지에 포함될 부가 설명을 뜻한다.

생성된 이미지

docker commit -a "lhs0731" -m "my second commit" commit_test commit_test:second

//컨테이너에 apt-get update 후 이미지를 만들었다. 그러면 이미지의 용량도 달라진다.

생성된 이미지

※ 컨테이너가 사용 중인 이미지를 docker rmi -f로 강제로 삭제하면 이미지의 이름이 으로 변경되며, 이러한 이미지들을 댕글링(dangling) 이미지라고 한다. 댕글링 이미 지는 다음과 같이 별도로 확인할 수 있다.

# docker images -f dangling=true

 

이미지 추출

docker save -o ubuntu_14.04.tar ubuntu:14.04

 

docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지 이름과 태그 등 이미지의 모든 매타데이터를 포함해 하나의 파일로 추출할 수 있다. 

docker load -i ubuntu_14.04.tar

 

추출된 이미지는 load 명령어로 모든 매타데이터와 함께 도커에 이미지로 로드할 수 있다.

export 명령어는 컨테이너의 파일시스템을 tar 파일로 추출하지만 Docker 이미지의 layer에 대한 설정 정보를 저장하지 않는다. 또한 import 명령어는 추출된 파일을 이미지로 다시 저장한다.

docker export -o rootFS.tar mycontainer
docker import rootFS.tar myimage:0.0

 

export 한 이미지를 다시 import하여 이미지를 생성 후 컨테이너를 생성하려고 하면 다음과 같이 오류가 발생한다.

docker run -i -t -p 80:80 --name owncloud ubuntu_own:20.04
--> docker: Error response from daemon: No command specified. See 'docker run --help’

 

여기서 살펴볼 점은 바로 도커 export로 추출하여 로드한 docker image의 경우 docker container를 단순히 아카이빙 한 이미지 라는 것이다. 즉 압축한 파일 자체를 이미지로 로드 해 둔 것이라고 볼 수 있다. 이를 정상적으로 기동하기 위해서는 import 이미지를 기반으로 새롭게 Dockerfile을 작성하거나, import 시점에 명령어를 주입시켜 주어야 한다.

 

이미지 배포

docker run -it --name commit_container1 ubuntu:14.04
먼저 컨테이너를 생성한다.
docker commit commit_container1 rep_0522:0.0
생성한 컨테이너 commit_container1의 이미지를 rep_0522 repository에 업로드 하려 커밋
docker tag rep_0522:0.0 lhs0731/rep_0522:0.0
태그 생성
docker login
도커에 로그인후
docker push lhs0731/rep_0522:0.0
푸쉬


 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/12   »
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
글 보관함