Docker - Docker 기본사항
Docker 설치
: 도커의 설치는 아래 가이드를 수행하면 된다.
$ curl -fsSL <https://get.docker.com/> | sudo sh
$ sudo usermod -aG docker $USER # docker 실행 시 root 권한이 필요하므로 현재 user를 group에 추가해준다.
$ sudo service docker restart
$ sudo chmod 666 /var/run/docker.sock # /var/run/docker.sock 파일의 권한을 666으로 변경하여 그룹 내 다른 사용자도 접근 가능하게 변경
간단한 Docker 실행
- 도커 실행은 다음 명령으로 할 수 있다.
docker run --name jay ubuntu:16.04
위 명령을 실행한 후 실행중인 docker를 보면 아래와 같이 보인다.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53c3dcd50980 ubuntu:16.04 "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago jay
이렇게 Exited 상태가 된 것은 COMMAND인 /bin/bash
를 수행하도록 설정되어있으므로 단순히 bash 쉘을 실행시키고 종료한다.
종료하지 않고 계속 실행중인 상태로 만들려면 docker run --name jay -it ubuntu:16.04 /bin/bash
와 같이 옵션을 주면 된다.-i
는 interactively의 약어, -t
는 attach to terminal 이라 생각하면 된다.
docker run 시 사용되는 옵션들은 다음과 같다.
: docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
---|---|
-d | detached mode, 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
–link | 컨테이너 연결 [컨테이너명:별칭] |
Docker run에 대한 이해
: docker run
실행 시 docker: Error response from daemon: Conflict. The container name "/ubuntu_test" is already in use by container와 같은 에러를 발견하는 경우가 있다. 이는 docker run
명령이 "create" 와 "start" 명령을 한번에 실행시키는 명령이기 때문에 create 시 이미 동일한 이름의 컨테이너가 존재하기 때문에 발생한다. 따라서 docker rm <id or name>
으로 삭제한 후 다시 실행하면 된다.
: detached 모드로 docker가 종료되지 않고 계속 실행되도록 하려면 docker run -d -it --name ubuntu_test ubuntu
을 수행해주어야 한다.
Docker Life-Cycle command
명령어 | 의미 | 예 |
---|---|---|
run |
배포 및 실행 | docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql -v /my/own/datadir:/var/lib/mysql mysql:5.7 |
stop |
실행 중인 Docker 컨테이너를 정지 | docker stop ${CONTAINER_ID} |
start |
정지 중인 Docker 컨테이너를 실행 | |
rm |
배포한 Docker 컨테이너를 삭제 | |
ps (-a) |
실행 중인 (모든) 컨테이너를 표시 |
Docker control command
명령어 | 의미 | 예 |
---|---|---|
exec |
실행 중인 컨테이너에 명령을 실행 | docker exec -it mysql /bin/bash ,,, docker exec nginx-vol ls -al |
logs |
컨테이너의 로그를 표시 | docker logs ${CONTAINER_ID} |
inpsect |
컨테이너/이미지의 상세 정보를 표시 |
Docker image-relative command
명령어 | 의미 | 예 |
---|---|---|
images |
Docer 데몬에 있는 Docker 이미지 목록을 표시 | |
rmi |
Docer 데몬에 있는 Docker 이미지를 삭제 | docker rmi ${IMAGE_ID} |
Tips
|명령어|의미|
|---|---|
|docker rm -v $(docker ps -a -q -f status=exited)
|종료 상태인 모든 Docker 컨테이너를 삭제||
Dockerfile
FROM ubuntu:latest
MAINTAINER jay <woghd8754@yonsei.ac.kr>
RUN apt-get -y update
RUN apt-get -y install valgrind
EXPOSE 80 443
CMD ["ls", "-al"]
# 1. ubuntu 설치 (패키지 업데이트 + 만든사람 표시)
FROM ubuntu:16.04
MAINTAINER subicura@subicura.com
RUN apt-get -y update
# 2. ruby 설치
RUN apt-get -y install ruby
RUN gem install bundler
# 3. 소스 복사
COPY . /usr/src/app
# 4. Gem 패키지 설치 (실행 디렉토리 설정)
WORKDIR /usr/src/app
RUN bundle install
# 5. Sinatra 서버 실행 (Listen 포트 정의)
EXPOSE 4567
CMD bundle exec ruby app.rb -o 0.0.0.0
docker build -t {tag_name} .