# Docker 简单使用

Docker Desktop的简单使用，最简单的是**用图形化界面统一操控**。

Containers 容器，Images 镜像，Volumes 卷(分区)

### 启动容器：

docker run -d -p 80:80 docker/getting-started

* \-d - run the container in detached mode (in the background)
    

* \-p 80:80 - map port 80 of the host to port 80 in the container
    
* docker/getting-started - the image to use
    

### Build镜像：

docker build -t getting-started .

* getting-started 镜像名
    
* \-t 给镜像起的名字
    
* . 指示Dockerfile所在的位置，. 即当前文件夹
    

### Volume:

docker volume create todo-db 创建一个名为todo-db，volume的目的是模拟一个公共的磁盘

docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

* \-v 表示这个容器使用volume
    
* todo-db 是volume的名字
    
* /etc/todos 是volume 挂载(mount)的位置
    

### Network：

docker network create todo-app 创建一个名为todo-app的网络

docker run -d **\--network todo-app --network-alias mysql** --platform linux/amd64 -v todo-mysql-data:/var/lib/mysql -e MYSQL\_ROOT\_PASSWORD=secret -e MYSQL\_DATABASE=todos mysql:5.7

* 在todo-app的网络空间中创建容器，并指定一个别名 mysql (DNS 查看时会用到)
    

### Docker-compose

由于同一项目使用多个容器并且配置环境变量非常麻烦，使用docker-compose可以将所有配置收敛到一处。

在项目的根目录下增加一个文件docker-compose.yml，内容如下：

```YAML
version: "3.8"services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todosvolumes:
  todo-mysql-data:
```

docker-compose up -d 使用这个命令启动容器，-d代表着容器后台运行。

docker-compose down --volumes 停止容器，--volumes代表着回收卷。

### 常用命令：

docker ps 看运行中的容器

docker stop &lt;the-container-id&gt;

docker rm &lt;the-container-id&gt;

docker exec &lt;container-id&gt; cat /data.txt 执行该容器中的cat命令
