> For the complete documentation index, see [llms.txt](https://kde6260.gitbook.io/dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kde6260.gitbook.io/dev/docker/undefined-1.md).

# 컨테이너 생성하기

&#x20;컨테이너를 실행하는 명령어는 아래와 같다.

```
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
```

#### 우분투 컨테이너 실행하기

우분투 이미지를 이용하여 우분투 컨테이너를 실행해보겠다. 로컬에 이미지가 없다면 자동으로 dockerhub에서 이미지를 내려받아 설치한다.

```
$ docker run ubuntu:16.04
```

별도의 옵션을 주지 않았기 때문에 컨테이너는 실행 후에 바로 종료된다. (컨테이너도 프로세스에 속한다.) 생성된 컨테이너에 터미널로 접속하고 싶다면 아래와 같이 옵션을 준다.

```
$ docker run -it --name ubuntu -v /Users/daeun/home/ ubuntu:16.04
```

| `--interactive, -i` | 표준입출력을 유지한다.            |
| ------------------- | ----------------------- |
| `--tty, -t`         | 가상 터미널을 할당한다.           |
| `--name`            | 컨테이너에 이름을 붙인다.          |
| `--volume, -v`      | 로컬의 디렉토리를 컨테이너에 마운팅시킨다. |

다양한 `docker run` 옵션들 : <https://docs.docker.com/engine/reference/commandline/run/>

위 명령어를 실행하면 우분투 컨테이너를 실행하고 컨테이너 가상 터미널로 접속하게 된다. `$ docker ps` 로 실행중인 컨테이너들을 조회하면 아래와 같다.

```
CONTAINER ID    IMAGE            COMMAND CREATED        STATUS      PORTS  NAMES 
c8569ddafa3e ubuntu:16.04 "bash" 4 seconds ago         Up 3 seconds       ubuntu
```

&#x20;

#### redis 컨테이너 실행하기

레디스의 기본 포트는 6379번이다. 레디스 컨테이너를 백그라운드로 실행하고 컨테이너의 포트를 로컬호스트의 포트로 연결해보겠다.

```
$ docker run -d -p 1234:6379 redis
```

| `--detach, -d`  | 컨테이너를 백그라운드로 실행하고 ID를 출력한다.               |
| --------------- | ----------------------------------------- |
| `--publish, -p` | 컨테이너의 포트를 호스트로 연결한다. `호스트포트 : 컨테이너포트` 형식. |

이미지 이름에 별도의 태그를 붙이지 않으면 `latest` 태그가 자동으로 붙어서 최신버전의 이미지를 로컬에서 찾거나 dockerhub에서 내려받는다.

백그라운드로 redis 컨테이너가 실행되고 있는지 ping으로 테스트해보자. 로컬호스트의 1234번 포트와 연결되어 있으므로 포트번호 1234로 테스트한다.

```
➜  ~ ping localhost -p 1234
PATTERN: 0x1234
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.052 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.101 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.100 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.091 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.094 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.094 ms
^C
--- localhost ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.052/0.089/0.101/0.017 ms
```

####

#### mysql 컨테이너 실행하기

환경변수를 옵션으로 줘서 mysql 컨테이너를 실행해보겠다.

```
$ docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=true -e MYSQL_DATABASE='daeun-db' -p 3306:3306 mysql
```

| `--env, -e` | 컨테이너에 환경변수를 설정한다. |
| ----------- | ----------------- |

mysql 컨테이너에 설정할 수 있는 환경변수들 : <https://hub.docker.com/_/mysql>

위 명령어를 실행하면 두 가지 환경변수가 mysql 에 셋팅된다.( root계정으로 로그인 시 비밀번호를 입력을 생략하고 `daeun-db` 라는 이름의 데이터베이스를 생성한다.) 컨테이너에 들어가서 확인해보자.

```
➜  ~ docker exec -it f43167e21be6 bash
root@f43167e21be6:/# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.17 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| daeun-db           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql>
```

이미 실행중인 컨테이너에 접속하려면 `$ docker exec` 명령어를 사용한다.
