安装
其他系统:
MAC安装docker: https://docs.docker.com/docker-for-mac/install/
Windows 10 安装docker: https://docs.docker.com/docker-for-windows/install/
Windows 10以下:
- 安装VMware: https://blog.csdn.net/qq_42545206/article/details/82790699
- VMware中安装centos7:https://blog.csdn.net/qq_42545206/article/details/90301472
- centos7中安装docker
镜像
Dockerfile
参考我们vonedao的:
http://gitlab.vonedao.com/vonechain-platform/vonedao-upms/blob/develop/vonedao-upms-biz/Dockerfile
#基础镜像
FROM java:8-jre
#本文件的作者信息
MAINTAINER XXXX@126.com
#设置时区
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#创建路径
RUN mkdir -p /vonedao-upms
#定义工作目录
WORKDIR /vonedao-upms
#程序的端口。
EXPOSE 4000
#将jar包放入工作目录
ADD ./target/vonedao-upms-biz.jar ./
#程序运行的命令
CMD sleep 6;java -Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom -jar vonedao-upms-biz.jar
打包镜像
- 使用了maven-docker插件的打包方式
编译打包jar
mvn -f ./pom.xml clean install -Dmaven.test.skip=true -U
打镜像以及推送镜像
mvn -f ./pom.xml docker:stop docker:remove docker:build docker:push
- 没有使用maven-docker插件的打包方式
编译打包jar
# mvn -f ./pom.xml clean install -Dmaven.test.skip=true -U
cd 到Dockerfile所在路径。
本地没有安装docker时,调用远程docker打镜像
# docker -H tcp://10.10.3.72:2375 build -t docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0 .
本地没有安装docker时,调用远程docker推送镜像
# docker -H tcp://10.10.3.72:2375 push docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0
本地安装了docker打镜像
# docker build -t docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0 .
# docker push docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0
命令介绍 docker build -t docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0 .
- -t : 指定镜像的tag
- docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0
docker.vonedao.com 是镜像仓库的域名
vonedao-cs 是项目名称,便于管理镜像
vonedao-job-admin:1.0.0 是工程名称和版本号
不指定版本号则默认是laster
- 命令最后那个 . 是指当前
镜像信息查看
查看本地进行
# docker images
查看镜像历史打镜像的情况
# docker history 镜像名称或者镜像id
# docker history b89bce05c7db --no-trunc --format {{.CreatedBy}}
使用–no-trunc 这个参数就可以看到全貌了
使用 --format {{.CreatedBy}}自定义输出格式
查看镜像详细情况
# docker inspect 镜像名称或者镜像id
镜像导出导入
导出:
docker save -o nginx.tar nginx:latest或docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
导入:
docker load -i nginx.tar或docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
实践
docker swarm
docker swarm 是docker的官方集群模式。集群不要求机器数量。一个单机的docker也能自成一个swarm集群。
- 初始化集群
docker swarm init
- 添加节点为管理节点
swarm join-token manager
集群节点操作
Docker swarm集群增加节点和删除节点
docker swarm集群节点打标签
网络
添加网络
- 自定义ingress
https://www.cnblogs.com/zoujiaojiao/p/13366680.html
关于mtu :https://blog.csdn.net/passionkk/article/details/100538418
- 自定义overlay
默认的方式:docker network create --driver overlay 网络名称
自定义:docker network create --driver overlay --subnet=192.168.0.0/24 --gateway=192.168.0.254 vonedao_net
--subnet=192.168.0.0/24 --gateway=192.168.0.254 指定子网和网关
容器之间网络
# docker ps |grep vonedao-monitor
# docker exec -it 9e7c9809ffe5 /bin/bash
# curl -i http://vonedao-oa-platform:5005
以上nacos在开发、测试、生产都是一样的配置,为什么不会错?因为在不同的集群中,容器的网络是不通的。
在同一个集群中,不同的网络(namesapce)中的,容器的网络也是不通的。
yaml 编排
- docker-compose 单机
docker-compose容器化构建gitlab服务 - docker swarm 集群
举个例子:
#版本
version: '3.0'
#容器服务开始位置
services:
#容器名称
cs-gateway:
#镜像
image: docker.vonedao.com/vonedao-cs/cs-gateway:1.0.0
#映射到宿主机的端口,前面是宿主机端口,后面的是容器端口
ports:
- "9988:9999"
#给容器添加/etc/hosts解析。原因是nacos.vonedao.com没有做做dns解析。
extra_hosts:
- "nacos.vonedao.com:10.10.4.86"
#环境变量
environment:
- NACOS-PORT=80
- NACOS-HOST=nacos.vonedao.com
- NACOS-NAMESPACE=vonechain-account-sit
#启动模式和重启策略
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
placement:
#运行在打了sit_vonedao标签的节点上。
constraints:
- node.labels.role==sit_vonedao
#指定容器运行的网络
networks:
- account_net
networks:
account_net:
external: true
启动命令docker stack deploy -c cs-gateway.yaml cs-gateway
cs-gateway.yaml 文件名称
cs-gateway是stack的task名称。不是容器名称。
一个容器可以添加多个网络:
networks:
- account_net
- othen_network
networks:
account_net:
external: true
othen_network:
external: true
常用命令
- 查看本机容器
正在运行的容器
# docker ps
所有容器,包括不正常挂掉的
# docker ps -a
查看容器详情
# docker inspect 容器id
进入容器
#docker exec -it 容器id /bin/bash
查看容器日志
#docker logs -f --tail=100 容器id
删除容器(必须先停止容器才能删除)
#docker stop 容器id
#docker rm 容器di
2.本机容器的文件路径
# df -h
# ls /var/lib/docker/
- 查看所有stack
docker stack ls
- 查看单个stack
docker stack ps stack名称
5.查看service
docker service ls
6.根据stack 查看service
# docker stack services vonedao-tenant-gateway
7.查看service的日志
docker service logs --raw -f --tail=n 服务名称
8.查看service详情
docker inspect service名称或者id
9.停止stack
docker stack rm stack名称
10.停止service
docker service rm service名称
11.停止容器
docker rm 容器id
- 查看镜像
docker images
- 查看镜像详情
docker inspect 镜像id
- 删除镜像
docker rmi 镜像id