一、Docker简介

二、Docker的架构

三、安装Docker(Ubuntu)

 四、Docker镜像常用命令

五、Docker容器常用命令

六、MySQL相关

七、Spring Boot相关

八、Nginx相关

九、Redis相关

十、Dockerfile常用指令


一、Docker简介

Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

二、Docker的架构

docker win 部署 dpan docker部署系统_Docker

1. Docker daemon(Docker守护进程)

  • Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。可通过Docker客户端与之通信。

2. Client(Docker客户端)

  • Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。

3. Images(Docker镜像)

  • Docker镜像是一个只读模版,它包含创建Docker容器的说明。它和系统安装光盘有点像--使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行Docker镜像中的程序。

4. Container(容器)

  • 容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。

5. Registry

  • Docker Registry是一个集中存储与分发镜像的服务。构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复制。
  • 一个Docker Registry(看作Maven仓库)可包含多个Docker仓库(看作jar包路径),每个仓库可包含多个镜像标签(看作jar包版本号),每个标签对应一个Dokcer镜像。
  • Docker Registry可分为公有(Docker Hub)和私有。

三、安装Docker(Ubuntu)

1. 前提条件,系统的内核版本高于 3.10

uname -r

2. 获取最新版本的Docker安装包

wget -qO- https://get.docker.com/ | sh

3. 启动docker 后台服务

sudo service docker start

4. 测试运行hello-world

docker run hello-world

5. 镜像加速

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

 四、Docker镜像常用命令

1. 搜索镜像

docker search

2. 下载镜像

docker pull

3. 列出镜像

docker images

4. 删除本地镜像

docker rmi
docker rmi -f $(docker images)        #删除所有镜像,-f表示强制删除

5. 构建镜像

docker build
  • -t:指定镜像的标签 

五、Docker容器常用命令

1. 新建并启动容器

docker run
  • -d:后台运行
  • -p:随机端口映射
  • -p:指定端口映射
  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort
  • containerPort
  • --network:指定网络模式
  • --network=bridge:默认,表示连接到默认的网桥
  • --network=host:容器使用宿主机的网络
  • --network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置
  • --network=none:不配置该容器的网络,用户可自定义网络配置
  • --name:指定容器名称

2. 列出容器

docker ps        #列出运行中的容器
docker ps -a        #列出所有容器

3. 停止容器

docker stop

4. 强制停止容器

docker kill

5. 启动已停止的容器

docker start

6. 重启容器

docker restart

7. 进入容器


docker exec -it app1 /bin/bash
docker exec -it web1_nginx1 /bin/sh

8. 删除容器

docker rm        #只能删除已停止的容器
docker rm -f $(docker ps -a -q)        #删除所有容器

9. 查看容器实时日志

docker logs -f -t --tail 10 web1_nginx1

六、MySQL相关

1. 拉取镜像

docker pull daocloud.io/library/mysql:5.7.4

2. 新建并启动镜像

docker run --name mysql1 --restart=always -v /home/yeta/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro -e MYSQL_ROOT_PASSWORD=root -d -p3306:3306 daocloud.io/library/mysql:5.7.4
  • -v:从宿主机挂载/home/yeta/data目录至容器内作为/var/lib/mysql目录,那样MySQL就会默认将数据文件写入这个目录中 

3. 使用 MySQL 命令行工具连接 MySQL

docker run -it --link mysql1:mysql --rm daocloud.io/library/mysql:5.7.4 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

4. 修改时区


set global time_zone = '+8:00';
set time_zone = '+8:00';
flush privileges;

5. 建库建表(略)

七、Spring Boot相关


八、Nginx相关

1. 拉取镜像

docker pull daocloud.io/library/nginx:1.13.0-alpine

2. 新建并启动镜像(托管静态网页内容)

  • 方式1:映射目录和配置文件
docker run --name web1_nginx1 -v /home/yeta/projects/web1/html/:/usr/share/nginx/html:ro -v /home/yeta/projects/web1/nginx.conf:/etc/nginx/nginx.conf:ro -d -p 80:80 daocloud.io/library/nginx:1.13.0-alpine
  • 方式2:利用Dockerfile基于ngix的镜像构建自己的镜像
FROM daocloud.io/library/nginx:1.13.0-alpine
COPY html /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
docker build -t web1_nginx2 .
docker run --name web1_nginx2 -d -p 80:80 web1_nginx2

九、Redis相关

1. 拉取镜像

docker pull daocloud.io/library/redis:3.2.9

2. 启动容器

docker run --name redis1 -d -p 6379:6379 daocloud.io/library/redis:3.2.9

十、Dockerfile常用指令

1. ADD复制文件

  • 格式:ADD docker2-0.0.1-SNAPSHOT.jar app.jar
  • 从src目录复制文件到容器的dest,src可以是Dockerfile所在目录的相对路径,也可以是一个URL,还可以是一个压缩包。

2. COPY复制文件

  • 格式:COPY html /usr/share/nginx/html
  • 和ADD类似,但不支持URL和压缩包。

3. ENV设置环境变量

  • 格式:ENV JAVA_HOME /path/to/java

4. ARG设置构建参数

  • 格式:ARG user1=someuser
  • 类似ENV,但设置的是构建时的环境变量,在容器运行时是不会存在的。

5. CMD容器启动命令

  • 格式:CMD echo "this is a test" | wc -
  • 每个Dockerfile只有一个CMD命令,多个只执行最后一条。

6. ENTRYPOINT入口点

  • 和CMD类似。

7. EXPOSE声明暴露的端口

  • 格式:EXPOSE 8080
  • 只是一个声明,运行时并不会因为该声明就打开相应端口,主要是帮助镜像使用者理解该镜像服务的守护端口,其次是当运行时使用随机映射时,会自动映射EXPOSE的端口。

8. FROM指定基础镜像

  • 格式:FROM daocloud.io/library/nginx:1.13.0-alpine
  • 必须指定且需要写在其他指令之前。

9. LABEL为镜像添加元数据

  • 格式:LABEL version="1..0"

10. MAINTAINER指定维护者的信息

  • 格式:MAINTAINER yeta<xx@qq.com>

11. RUN执行命令

  • 格式1:RUN <command>
  • Linux中默认是/bin/sh -c
  • Windows中是cmd /s /c
  • 格式2:RUN ["executable", "param1", "param2"]

12. USER设置用户

  • 格式:USER 用户名
  • 用于设置启动镜像时的用户或者UID,写在该指令后的RUN、CMD以及ENTRYPOINT指令都将使用该用户执行命令。

13. VOLUME指定挂载点

  • 格式:VOLUME /data
  • 使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。

14. WORKDIR指定工作目录

  • 格式:WORKDIR /path/to/workdir
  • 切换目录指令,类似cd,写在该指令后的RUN、CMD以及ENTRYPOINT指令都将该目录作为当前目录,并执行相应的命令。