docker配置node、mysql、mongoDB、nginx开发环境


目录

  • docker是什么?
  • docker基本概念
    * 容器
    * 镜像
    * 容器链接
    * 仓库
    * Docker compose
  • docker-compose.yml配置

docker是什么?

docker是一个开源的性能开销极低的容器引擎,容器完全使用沙箱机制,相互之间不会有任何接口(类似iphone的app)。

docker基本概念

容器

容器是镜像的实例,镜像是容器的类,通过运行镜像可以创建容器。

常用命令

//获取镜像
docker pull ubuntu
//运行镜像
docker run -it ubuntu /bin/bash
//退出终端
exit
//查看所有容器
docker ps -a
//启动容器
docker start <容器 ID>
//后台运行,加入-d参数默认不会进入容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
//停止一个容器
docker stop <容器 ID>
//重启容器
docker restart <容器 ID>
//进入后台启动的容器
docker attach <容器 ID>,从容器退出会导致容器停止
docker exec -it <容器 ID> /bin/bash 从容器退出,不会导致容器停止(推荐)
//删除容器
docker rm -f <容器 ID>

参数说明:

  • -i 交互式操作
  • -t 终端
  • -d 后台运行
  • ubuntu 镜像
  • /bin/bash 放在镜像后的是命令,我们希望有个交互式shell,因此使用/bin/bash

镜像

常用命令

//查看镜像
docker images
//获取镜像
docker pull ubuntu
//查找镜像
docker search httpd
//删除镜像
docker rmi hello-world

创建镜像

  • 在已有镜像上修改
  • 使用Dockerfile文件构建

在已有镜像上修改

更新镜像:

在更新镜像前我们需要先运行镜像启动容器
docker run -t -i ubuntu:15.10 /bin/bash

完成修改操作后,exit退出容器

使用docker commit提交修改

docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

参数说明:

  • -m 提交的描述信息
  • -a 作者
  • runoob/ubuntu:v2 指定要构建的镜像名

构建镜像:

docker build -t runoob/centos:6.7 .

参数说明:

  • -t 要构建的镜像名
  • . Dockerfile文件所在路径,可以指定Dockerfile所在绝对路径

容器链接

  • 端口映射
  • 容器互联

仓库

我们可以将构建好的镜像上传到docker仓库中,这里不过多描述。

Docker compose

docker compose是定义和运行多容器应用的工具。我们搭建开发环境和生产环境需要用到多个容器,所以要配置docker-compose.yml文件。

docker-compose.yml配置

version: "3"
services: 
  web:
    image: node:12.16.1
    working_dir: /code
    volumes: 
      - .:/code
    ports: 
      - "8360:8360"
    command: npm start
  mysql:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    volumes: 
      - ./data:/var/lib/mysql
    restart: always
    environment: 
      - MYSQL_USER=chunshan
      - MYSQL_PASSWORD=123456
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=think-one
   mongo:
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"
    command: --storageEngine wiredTiger --auth
    ports: 
      - "3306:3306"
  

注意:

docker 容器一但删除所有相关的数据都会消失,所以要使用volumes将数据挂载到项目文件加下,防止数据丢失造成损失。

参考资源:

https://www.runoob.com/docker/docker-compose.html