一、安装Docker

参考阿里云中Docker的安装教程

二、CentOS中常用的命令

1、开启Docker服务的命令

# 查看docker服务状态
systemctl status docker
# 启动docker服务     
systemctl start  docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
# 设置开机启动docker服务
systemctl enable docker

2、防火墙相关的命令

# 启动防火墙: 
systemctl start firewalld
# 查看防火墙状态: 
systemctl status firewalld 
# 停止防火墙: 
systemctl disable firewalld
# 禁用防火墙: 
systemctl stop firewalld
# 启动防火墙服务:
systemctl start firewalld.service
# 关闭防火墙服务:
systemctl stop firewalld.service
# 重启防火墙服务:
systemctl restart firewalld.service
# 查看防火墙服务的状态:
systemctl status firewalld.service
# 在开机时启用一个防火墙服务:
systemctl enable firewalld.service
# 在开机时禁用一个防火墙服务:
systemctl disable firewalld.service
# 查看防火墙服务是否开机启动:
systemctl is-enabled firewalld.service
# 查看已启动的防火墙服务列表:
systemctl list-unit-files|grep enabled
# 查看启动失败的防火墙服务列表:
systemctl --failed
# 查看防火墙版本: 
firewall-cmd --version
# 查看防火墙帮助: 
firewall-cmd --help
# 显示防火墙状态: 
firewall-cmd --state
# 查看防火墙所有打开的端口: 
firewall-cmd --zone=public --list-ports
# 更新防火墙规则: 
firewall-cmd --reload
# 查看防火墙区域信息:  
firewall-cmd --get-active-zones
# 查看指定接口所属区域: 
firewall-cmd --get-zone-of-interface=eth0
# 拒绝所有包:
firewall-cmd --panic-on
# 取消拒绝状态: 
firewall-cmd --panic-off
# 查看是否拒绝: 
firewall-cmd --query-panic

三、Docker相关的命令

1、镜像相关的命令

# 查看多有镜像
docker images
# 获取所有镜像ID
docker images -q
# 从DockerHub官网中查询镜像
docker search nginx
# 从DockerHub官网中获取镜像到本地
docker pull nginx
# 从DockerHub官网中获取指定版本镜像到本地
docker pull nginx:7.0
# 删除指定ID的镜像
dokcer rmi  id
# 删除所有的镜像
docker rmi `docker images -q` 
# 删除所有的镜像
docker rmi $(docker images -q)

镜像信息

REPOSITORY

TAG

IMAGE ID

CREATED

SIZE

镜像仓库源

镜像标签(版本)

镜像ID

镜像创建时间

镜像大小

1.1 Dockerfile文件创建镜像

# 创建镜像
docker build -t myImages .    --network=host  设置访问主机互联网
docker bulid –f dockerfile文件路径 –t 镜像名称:版本

关键字

作用

备注

FROM

指定父镜像

指定dockerfile基于那个image构建

MAINTAINER

作者信息

用来标明这个dockerfile谁写的

LABEL

标签

用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看

RUN

执行命令

执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]

CMD

容器启动命令

提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]

ENTRYPOINT

入口

一般在制作一些执行就关闭的容器中会使用

COPY

复制文件

build的时候复制文件到image中

ADD

添加文件

build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务

ENV

环境变量

指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value

ARG

构建参数

构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数

VOLUME

定义外部可以挂载的数据卷

指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]

EXPOSE

暴露端口

定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp

WORKDIR

工作目录

指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径

USER

指定执行用户

指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户

HEALTHCHECK

健康检查

指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制

ONBUILD

触发器

当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大

STOPSIGNAL

发送信号量到宿主机

该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。

SHELL

指定执行脚本的shell

指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

1.2  容器转镜像

docker commit 容器ID 镜像名称:镜像版本
docker save -o 压缩文件名称 镜像名称:镜像版本
docker load -i 压缩文件名称

2、容器相关的命令

# 查看正在运行的容器
docker (container) ps
# 查看所有容器
docker (container) ps -a
# 获取所有容器的ID
docker (container) ps -aq
# 查看正在运行的容器(新版本推荐)
docker container ls
# 查看所有容器(新版本推荐)
docker container ls -a

# 开启容器运行
docker (container) start ID
 # 停止容器运行
docker (container) stop ID
# 重启容器
docker (container) restart ID
# 删除容器(运行中的容器无法删除)
docker (container) rm ID
# 删除容器(运行中也可以删除)
docker (container) rm ID -f
# 组合命令,删除或停止容器
docker (container) rm/stop  $(docker (container) ps -aq)
# 查看容器的详细信息
docker (container) inspect ID
# 查看容器运行日志(仅一次)
docker (container) logs ID
# 实时查看日志(Ctrl + c 退出日志查看)
docker (container) logs -f ID

#  进入容器控制台  示例:docker (container) exec -it ID /bin/bash
docker (container) exec 参数
 # 创建并运行容器   示例: docker run -it --name=c1 nginx  /bin/bash
docker (container) run 参数
参数: -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
           -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
          -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
          -it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
          --name:为创建的容器命名

容器信息

CONTAINER ID

IMAGE

COMMAND

CREATED

STATUS

PORTS

NAMES

容器ID

创建容器所用镜像

容器启动运行的命令

容器创建时间

容器状态

容器的端口信息和使用的连接类型(tcp\udp)

容器名称

STATUS:created(已创建)、restarting(重启中)、running或Up(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)

四、数据卷

概念:

1、数据卷是宿主机中的一个目录或文件

2、当容器目录和数据卷目录绑定后,对方的修改会立即同步

3、一个数据卷可以被多个容器同时挂载

4、一个容器也可以被挂载多个数据卷

作用:

1、容器数据持久化

2、外部机器和容器间接通信

3、容器之间数据交换

# 创建并启动容器配置数据卷, 可以配置多个,在后面多加 -v
docker run 参数 -v 宿主机文件路径:容器文件路径  ...    

# 数据卷容器
docker run 参数 --name=c -v /volume centos
# 绑定数据卷容器
docker run 参数 --name=c1 --volumes-from c centos

五、应用部署

1、mysql部署

docker search mysql 
docker pull mysql
docker run -id --name=c_mysql -p 3306:3306  -v  $PWD/conf:/etc/mysql/conf.d  -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

2、nginx部署

docker search nginx
docker pull nginx
docker run -id --name=c_nginx -p 80:80 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx
# 本地测试访问
curl 127.0.0.1:80

3、redis部署

docker search redis
docker pull redis 
docker run -id --name=c_redis -p 6379:6379 redis
// 进入redis
docker exec -it ID redis-cli
// 查询默认密码
config get requirepass 
// 设置密码
config set requirepass xxxx

4、mongo部署

docker search mongo
docker pull mongo
docker run -id --name=c_mongo -p 27017:27017 mongo
// 进入mongo
docker exec -it ID mongo