安装docker

卸载

yum remove docker \
                   docker-client \
                   docker-client-latest \
                   docker-common \
                   docker-latest \
                   docker-latest-logrotate \
                   docker-logrotate \
                   docker-selinux \
                   docker-engine-selinux \
                   docker-engine \
                   docker-ce

安装

yum install -y yum-utils \
            device-mapper-persistent-data \
            lvm2 --skip-broken

更新镜像

# 设置docker镜像源
 yum-config-manager \
     --add-repo \
     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     
 sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
 
 yum makecache fast
 
 
 yum install -y docker-ce

关闭防火墙

# 关闭
 systemctl stop firewalld
 # 禁止开机启动防火墙
 systemctl disable firewalld

启动docker

systemctl start docker  # 启动docker服务
 
 systemctl stop docker  # 停止docker服务
 
 systemctl restart docker  # 重启docker服务

基础命令

  1. docker images查看当前已拉取镜像
  2. `docker ps -a 查看已运行的容器
  3. docker run -it –-name c1 centos:7 /bin/bash 运行centos7容器
  4. docker run -it --name c3 -v /volume centos:7 /bin/bash
    docker run -it –-name c1 —volumes-from c3 centos:7 /bin/bash关联数据卷
  5. docker exec -it c1 /bin/bash 进入一个容器
  6. docker update --restart always <container_id> 修改自启动

docker部署mysql

  1. 搜索mysql镜像
docker search mysql
  1. 拉取mysql镜像
docker pull mysql:5.7.29
  1. 创建容器,设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql数据信息
 mkdir ~/mysql
 cd ~/mysql
docker run -id \
 -p 3306:3306 \
 --name c_mysql \
 -v $PWD/conf:/etc/mysql/conf.d \
 -v $PWD/logs:/logs \
 -v $PWD/data:/var/lib/mysql \
 -e  MYSQL_ROOT_PASSWORD=123456 \
 mysql:5.7.29

docker部署tomcat

  1. 搜索tomcat镜像
docker search tomcat
  1. 拉取tomcat镜像
docker pull tomcat
  1. 创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
 mkdir ~/tomcat
 cd ~/tomcat
docker run -id \
 -p 8080:8080 \
 --name c_tomcat \
 -v $PWD:/usr/local/tomcat/webapps \
 tomcat

docker部署nginx

  1. 搜索nginx镜像
docker search nginx
  1. 拉取nginx镜像
docker pull nginx
  1. 创建容器,设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
 mkdir ~/nginx
 cd ~/nginx
 mkdir conf
 cd conf
 # 在~/nginx/conf下创建nginx.conf文件,粘贴下面内容
#运行用户
 user nginx;  
 #启动进程,通常设置成和cpu的数量相等
 worker_processes 1;
  
 #全局错误日志及PID文件
 error_log /var/log/nginx/error.log warn;
 pid    /var/run/nginx.pid;
  
 #工作模式及连接数上限
 events {
   worker_connections 1024;#单个后台worker process进程的最大并发链接数
 }
  
 #设定http服务器,利用它的反向代理功能提供负载均衡支持
 http {
    #设定mime类型,类型由mime.type文件定义
   include    /etc/nginx/mime.types;
   default_type application/octet-stream;
   
   log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                     'status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" ';
   #设定日志格式
   access_log  /var/log/nginx/access.log main;
  
   #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
   #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
   sendfile    on;
   #tcp_nopush   on;
  
   #连接超时时间
   keepalive_timeout 65;
    
   #开启gzip压缩
   #gzip on;
  
   include /etc/nginx/conf.d/*.conf;
   }
docker run -id --name nginx-test \
 -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

docker部署redis

  1. 搜索redis镜像
docker search redis
  1. 拉取redis镜像
docker pull redis:5.0
  1. 创建容器,设置端口映射、目录映射
docker run -id --name c_redis -p 6379:6379 redis:5.0
  1. 连接redis
./redis-cli.exe -h 192.168.200.2 -p 6379

docker部署elasticsearch

  1. 搜索elasticsearch镜像
docker search elasticsearch
  1. 拉取elasticsearch镜像
docker pull elasticsearch:7.5.1
  1. 创建容器,设置端口映射、目录映射

docker镜像制作

  1. 容器转为镜像
docker commit 容器id 镜像名称:版本号               #将容器转为已镜像
 docker save -o 压缩文件名称 镜像名称:版本号         #将镜像转为亚索文件
 docker load -i 压缩文件名称                       #将压缩文件还原为镜像
  1. dockerfile(常用)

关键字

作用

备注

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

部署springboot项目

  1. springboot打jar包
  2. jar包上传到linux中
  3. 编写dockerfile文件
FROM java:8
 MAINTAINER tangtao <2548651510@qq.com>
 ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
 CMD java -jar app.jar
  1. 执行命令docker build -f ./springboot_dockerfile -t app .,此时添加了一个docker镜像
  2. 执行命令docker run -id -p 8080:8080 app启动

自定义centos7镜像

需求:

自定义centos7镜像。要求:

  1. 默认登录路径为/usr
  2. 可以使用vim
#定义父镜像
 FROM centos:7 
 #定义作者信息
 MAINTAINER tangtao 
 #执行安装vim命令
 RUN yum install -y vim
 #定义默认的工作目录
 WORKDIR /usr
 #定义容器启动执行的命令
 CMD /bin/bash

服务编排

按照一定的业务规则批量管理容器

步骤:

  1. 利用dockerfile定义运行环境镜像
  2. 使用docker-compose.yml定义组成应用的各服务
  3. 运行docker-compose up启动应用

docker-compose

安装docker compose

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 
 chmod +x /usr/local/bin/docker-compose
 
 docker-compose -version

卸载docker-compose

rm /usr/local/bin/docker-compose

使用docker compose编排nginx+springboot项目

  1. 创建docker-compose目录
mkdir ~/docker-compose
 cd ~/docker-compose
  1. 编写docker-compose.yml文件
version: '3'
 services:
     nginx:
         image: nginx
         ports:
             - 80:80
         links:
             - app
         volumes:
             - ./nginx/conf.d:/etc/nginx/conf.d
     app:
         image: app
         expose:
             - "8080"
  1. 创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d
  1. 在./nginx/conf.d目录下编写.conf文件
server {
     listen 80;
     access_log off;
     
     location / {
         proxy_pass http://app:8080;
     }
 }
  1. 在~/docker-compose目录下使用docker-compose启动容器
docker-compose up
  1. 测试访问
http://192.168.200.2/hello

docker私有仓库

私有仓库搭建

#1. 拉取私有仓库
 docker pull registry
 #2. 启动私有仓库容器
 docker run -id --name registry -p 5000:5000 registry
 #3. 打开浏览器,输入地址 `http://192.168.200.2:5000/v2/_catalog`,看到{"repositories":[]} 表示私有仓库搭建成功
 #4. 修改daemon.json
 vim /etc/docker/daemon.json
 #在上述文件中添加一个key,保存退出。此步用于让docker信任私有仓库地址,注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
 {"insecure-registries":["192.168.200.2:5000"]}
 #5. 重启docker服务
 systemctl restart docker
 docker start registry

将镜像上传到私有仓库

#1. 标记镜像为私有仓库的镜像
 docker tag centos:7 192.168.200.2:5000/centos:7
 
 #2. 上传标记的镜像
 docker push 192.168.200.2:5000/centos:7