Docker

Docker 기본기

Docker 간단한 컨테이너 만들기

☁  ~  docker run ubuntu:20.04

Unable to find image 'ubuntu:20.04' locally
20.04: Pulling from library/ubuntu
185e8a4c1005: Already exists
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:20.04

run 명령어를 통해서 간단하게 ubuntu 환경을 만들 수 있습니다.

local 환경에 이미지가 없음을 파악하고, 해당 이미지를 pull해서 실행시킵니다.


☁  ~  docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

하지만 docker ps 를 통해 실행중인 컨테이너를 확인하면 아무것도 없는 것을 알 수 있습니다.

docker 컨테이너가 실행되고 정상적으로 종료되었기 때문에 아무것도 없는 상황입니다.


☁  ~  docker run --rm -it ubuntu:20.04 /bin/sh

# ls
bin  boot  dev	etc  home  lib	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var

위의 코드로 실행하면, ubuntu shell로 접속한 상황임을 알 수 있습니다.

접속된 상황에서 ls 명령어등 우분투 명령어를 실행하면 다음과 같이 ubuntu환경에서 명령어가 사용됩니다.

위에서 사용한 옵션을 살펴보면

--rm : 먼저 rm 옵션은 컨테이너가 종료됨과 동시에 컨테이너를 삭제하겠다는 의미입니다.

-it : -i 와 -t 옵션을 한번에 입력한 것으로, 터미널 입력을 위한 옵션입니다.


docker run --rm -p 1234:6379 redis

다음은 port설정방법입니다. 이를 테스트 하기 위해서 redis 컨테이너를 사용해보도록 하겠습니다.

telnet localhost 1234

set hello world
+OK
get hello
$5
world
quit

위의 코드를 실행하고 telnet 명령어로 접속을 하면 정상적으로 연결되는것을 확인 할 수 있습니다.

docker stop [container id or container name]

stop 명령어를 통해 컨테이너를 중지할 수 있습니다.

docker rm [container id or container name]

rm명령어를 통해 삭제할 수 있습니다

docker pull [이미지]

이미지를 pull 하는 방법은 위와 같습니다.

docker rmi [image id or image name]

이미지 삭제하는방법은 rmi 명령어를 사용합니다.

docker network create [network name]

위의 명령어를 통해 가상의 네트워크를 생성 할 수 있습니다.

이후 –network 옵션을 통해서 동일 네트워크로 묶을 수 있습니다.

docker stop mysql
docker rm mysql
docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --network=app-network \
  --name mysql \
  -v /my/own/datadir:/var/lib/mysql \
  mysql:5.7

위와 같이 -v 옵션을 통해서, 볼륨을 지정할 수 있습니다.


docker-compose

이전에 사용했던 코드들을 yaml파일을 통해서 간단하게 docker 운영 가능

version: '2'
services:
  db:
    image: mariadb:10.5
    volumes:
      - ./mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    image: wordpress:latest
    volumes:
      - ./wp:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress

subicura 블로그에서 가져온 yaml 코드 예시입니다. ( subicura님 블로그 가면 잘 설명되어 있습니다. )