[초심자] Docker 사용하기 (CLI)

category 서버/리눅스 서버 2019.07.17 20:58

안녕하세요. 도정진입니다.


Docker 를 사용해보고 있는 중입니다만, 아직 글을 쓸 정도는 아닌데 글을 적고 있습니다. 요즘 너무 바쁘다 보니 블로그 글을 적을 시간이 너무 없어서 일단 게시하고 있습니다.


모든 걸 알기 전까지 글을 잘 적지 않는 편인데.. 부족하더라도 도움이 되셨으면 합니다.






1. docker 설치하기


일단 X86의 경우에 그냥 아래 명령으로 쉽게 설치가 됩니다.


curl -fsSL https://get.docker.com/ | sudo sh


커맨트 창에 docker 라고 입력해 봅니다.


root@debian-4350:~# docker


Usage: docker [OPTIONS] COMMAND


A self-sufficient runtime for containers


Options:

      --config string      Location of client config files (default "/root/.docker")

  -D, --debug              Enable debug mode

  -H, --host list          Daemon socket(s) to connect to

  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")

      --tls                Use TLS; implied by --tlsverify

      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")

      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")

      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")

      --tlsverify          Use TLS and verify the remote

  -v, --version            Print version information and quit


Management Commands:

  builder     Manage builds

  config      Manage Docker configs

  container   Manage containers

  engine      Manage the docker engine

  image       Manage images

  network     Manage networks

  node        Manage Swarm nodes

  plugin      Manage plugins

  secret      Manage Docker secrets

  service     Manage services

  stack       Manage Docker stacks

  swarm       Manage Swarm

  system      Manage Docker

  trust       Manage trust on Docker images

  volume      Manage volumes


Commands:

  attach      Attach local standard input, output, and error streams to a running container

  build       Build an image from a Dockerfile

  commit      Create a new image from a container's changes

  cp          Copy files/folders between a container and the local filesystem

  create      Create a new container

  diff        Inspect changes to files or directories on a container's filesystem

  events      Get real time events from the server

  exec        Run a command in a running container

  export      Export a container's filesystem as a tar archive

  history     Show the history of an image

  images      List images

  import      Import the contents from a tarball to create a filesystem image

  info        Display system-wide information

  inspect     Return low-level information on Docker objects

  kill        Kill one or more running containers

  load        Load an image from a tar archive or STDIN

  login       Log in to a Docker registry

  logout      Log out from a Docker registry

  logs        Fetch the logs of a container

  pause       Pause all processes within one or more containers

  port        List port mappings or a specific mapping for the container

  ps          List containers

  pull        Pull an image or a repository from a registry

  push        Push an image or a repository to a registry

  rename      Rename a container

  restart     Restart one or more containers

  rm          Remove one or more containers

  rmi         Remove one or more images

  run         Run a command in a new container

  save        Save one or more images to a tar archive (streamed to STDOUT by default)

  search      Search the Docker Hub for images

  start       Start one or more stopped containers

  stats       Display a live stream of container(s) resource usage statistics

  stop        Stop one or more running containers

  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

  top         Display the running processes of a container

  unpause     Unpause all processes within one or more containers

  update      Update configuration of one or more containers

  version     Show the Docker version information

  wait        Block until one or more containers stop, then print their exit codes


Run 'docker COMMAND --help' for more information on a command.


기본적으로 모르는 부분에 대해서는 --help 로 확인하실 수 있으니 어려움이 없으실 것입니다.





2. docker 이미지 검색 및 다운로드


root@debian-4350:~# docker search gitlab

NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED

gitlab/gitlab-ce                             GitLab Community Edition docker image based …   2571                                    [OK]

sameersbn/gitlab                             Dockerized gitlab web server                    1121                                    [OK]

gitlab/gitlab-runner                         GitLab CI Multi Runner used to fetch and run…   524                                     [OK]

twang2218/gitlab-ce-zh                       汉化的 GitLab 社区版 Docker Image                     184                                     [OK]

gitlab/gitlab-ee                             GitLab Enterprise Edition docker image based…   148                                     

jangrewe/gitlab-ci-android                   GitLab CI image for building Android apps       51                                      [OK]

centurylink/gitlab                           This image uses the image from sameersbn / g…   26                                      [OK]

edbizarro/gitlab-ci-pipeline-php             Docker images for build and test PHP applica…   24                                      

klud/gitlab-runner                           GitLab Runner for ARM devices                   19                                      

ciricihq/gitlab-sonar-scanner                Gitlab Docker container to run sonar-scanner…   15                                      [OK]

gitlab/gitlab-runner-helper                                                                  14                                      

dockerphp/gitlab-ci-pipeline                 Gitlab CI pipeline for PHP applications         4                                       [OK]

gitlab/cog                                   GitLab Bundle for Cog                           3                                       

sgillespie/gitlab-runner                     A Dockerized GitLab Runner that automaticall…   3                                       [OK]

gitlab/gitlab-ce-qa                          GitLab QA has a test suite that allows end-t…   2                                       

mastertinner/gitlab-merge-request-resource   A concourse resource to check for new merge …   1                                       [OK]

lorands/gitlab-merge-request-resource        This is a fork of swisscom/gitlab-merge-requ…   1                                       [OK]

boldcommerce/gitlab-merge-request-resource   Reverted build of Swisscom's resource until …   0                                       [OK]

samcontesse/gitlab-merge-request-resource    A concourse resource to check for new merge …   0                                       [OK]

stanfordlegion/gitlab-ci                     An image for Gitlab CI.                         0                                       [OK]

edtan1/gitlab-merge-request-resource         GitLab Merge Request resource for ConcourseCI   0                                       [OK]

instrumentisto/gitlab-builder                Docker image with minimal toolchain required…   0                                       [OK]

gitlab/gitlab-ee-qa                          GitLab QA has a test suite that allows end-t…   0                                       

gitlab/gitlab-qa                             GitLab QA has a test suite that allows end-t…   0                                       

adamkl/gitlab-merge-request-resource         Customized with support for gitlab ssh on di…   0                                       [OK]



아쉽게도 docker cli 로는 tag 는 검색이 불가능합니다. 그래서 docker hub 웹 페이지를 봐야하는 불편함이 조금 있습니다.


gitlab 을 설치하기 위해서 아래의 사이트에 들어가보았습니다.


https://hub.docker.com/r/gitlab/gitlab-ce/tags



여기서 latest 를 설치해보겠습니다.


한편, docker 의 경우 기본 베이스 이미지는 공통으로 사용하고 변경분만 추가 다운로드 하기 때문에 차후에 다른 이미지를 받을 때, 용량이 절감되는 부분이 있습니다.


root@debian-4350:~# docker pull gitlab/gitlab-ce:latest

latest: Pulling from gitlab/gitlab-ce

35b42117c431: Pull complete 

ad9c569a8d98: Pull complete 

293b44f45162: Pull complete 

0c175077525d: Pull complete 

c00f43f22198: Pull complete 

919116aa9eac: Pull complete 

c43ba802d09b: Pull complete 

b2785e018405: Pull complete 

bcae678431d3: Pull complete 

5d91b12e0d65: Pull complete 

Digest: sha256:2303e18d40be3ebecd5b0e7ed06361942957b746d83f44f6c191a82eb9abc8fd

Status: Downloaded newer image for gitlab/gitlab-ce:latest





3. 컨테이너 실행하기


컨테이너를 실행하기 위해서 필요한 옵션들을 상기 dockerhub 에서 확인합니다.


혹은 dockerfile 을 직접 찾아서 확인할 수 있습니다. 옵션들을 확인한 후 아래의 정보를 파악할 수 있습니다.


- 사용포트


- 디렉터리


- 환경변수


상기 3가지를 체크해야하나, dockerfile 을 볼 수가 없어서 공식문서에서 가이드하는 부분으로 컨테이너를 실행해 보겠습니다. 


이 컨테이너는 443포트 80포트 22포트를 사용합니다. 그리고 볼륨으로는 /etc/gitlab, /var/log/gitlab, /var/opt/gitlab 이 있으나 일단 저는 테스트 목적이기 때문에 볼륨은 신경쓰지 않고 진행해 보겠습니다.


root@debian-4350:~# docker run --detach --hostname localhost \

> --publish 8443:443 --publish 8080:80 --publish 2222:22 \

> --name gitlab --restart always \

> gitlab/gitlab-ce:latest

ac4a5bb354af02cad1b0dde971c3cbac79e999d5df3513dbf6adbbe1bd23592b


--detach 는 백그라운드 옵션, --publish [호스트]:[컨테이너] 포트 매핑, 그리고 --name 은 이름 --restart 옵션은 재시작 옵션입니다.


특정 컨테이너 사용시, restart 옵션을 주면 계속 재시작 되는 부분이 있습니다. 특히 ubuntu 컨테이너같은 것들이 그렇습니다.





4. 컨테이너 쉘에 연결하기 및 동작 확인


아래의 명령으로 컨테이너 쉘에 연결이 가능합니다. 


root@debian-4350:~# docker exec -it gitlab /bin/bash

root@localhost:/# htop

bash: htop: command not found

root@localhost:/# apt update

Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB] 

Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]           

Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]

Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]        

Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [896 kB]

Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]             

Get:7 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]

Get:8 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [571 kB]  

Get:9 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6117 B]

Get:10 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]

Get:11 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]

Get:12 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]                                     

Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1279 kB]                                  

Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]                            

Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [977 kB]                               

Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB]                            

Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]                                 

Get:18 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B]                             

Fetched 15.9 MB in 11s (1369 kB/s)                                                                                    

Reading package lists... Done

Building dependency tree       

Reading state information... Done

7 packages can be upgraded. Run 'apt list --upgradable' to see them.

root@localhost:/#


실행 확인은 아래와 같이 가능합니다.


root@debian-4350:~# docker ps -a

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                            PORTS                                                               NAMES

ac4a5bb354af        gitlab/gitlab-ce:latest   "/assets/wrapper"   3 minutes ago       Up 3 minutes (health: starting)   0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp   gitlab


실제 gitlab 이 되는지 확인해보겠습니다. 실행이 잘 됩니다.






5. 컨테이너 삭제 및 이미지 관리


컨테이너를 삭제한다고 해서 이미지가 삭제되는 것도 아닙니다.


한 이미지로 여러개 컨테이너도 운영 가능합니다.


# 이미지 목록 보기

root@debian-4350:~# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

gitlab/gitlab-ce    latest              15563c211d40        2 weeks ago         1.8GB


# gitlab 컨테이너 중단, 이름을 지정하지 않았으면 컨테이너 이름으로 삭제

root@debian-4350:~# docker stop gitlab 

gitlab


# gitlab 컨테이너 삭제

root@debian-4350:~# docker rm gitlab

gitlab


# gitlab 이미지 삭제

root@debian-4350:~# docker rmi gitlab/gitlab-ce:latest 

Untagged: gitlab/gitlab-ce:latest

Untagged: gitlab/gitlab-ce@sha256:2303e18d40be3ebecd5b0e7ed06361942957b746d83f44f6c191a82eb9abc8fd

Deleted: sha256:15563c211d4020fdb3245d2fd5b316852635d48ad6b8727fee682e49e8f8c225

Deleted: sha256:64ff10a12cefbd1cdae06283fdb80f79b5c2317a7e0d63ce67188076dbfe9c06

Deleted: sha256:40b53d7d0b235543496912583f2f95c8aed124d9d8d30bbf5f072136e6d3e154

Deleted: sha256:5cead1b1559cffdc2afd8bb7d43a3e9aee09992c4c34f86e60a2f162809a064e

Deleted: sha256:510020eeb55084f02dc4a45e9b39f94b6556d3879999bcc344a7e9bdee05a53b

Deleted: sha256:6c4b80a5448ff501dfd54dfc4474103b616abddeda14f66d48dc99f52def6548

Deleted: sha256:2054683814766412635748b2bf2cc9e3b6655f852a3b280aa9261f122d6034a2

Deleted: sha256:03952d61b1fc131f23629c02f7ffb93708ae77108a32e4eedd83d4ec987ba51c

Deleted: sha256:a48e1b8909b41276ed1666d5262d981258163c6f0998b58e61efa4188944652e

Deleted: sha256:872ef8aee8632246e43a346a70274030c3613fe81af162a2fb6d14e1fcba980d

Deleted: sha256:1ea5a27b0484f2a227275fbb913d281461d9f356134a56002574904c3cfdea04

root@debian-4350:~# 





6. 마치며..


일단 간단하게 여기까지만 알아보겠습니다.


이후에 하드웨어 바인딩 및 상세 옵션에 대해서 알아볼 예정입니다.


감사합니다.


댓글을 달아 주세요