docker 日常使用笔记

安装

docker基础和centos安装docker

ubuntu 16 安装docker

其他系统:

MAC安装docker: https://docs.docker.com/docker-for-mac/install/

Windows 10 安装docker: https://docs.docker.com/docker-for-windows/install/

Windows 10以下:

  1. 安装VMware: https://blog.csdn.net/qq_42545206/article/details/82790699
  2. VMware中安装centos7:https://blog.csdn.net/qq_42545206/article/details/90301472
  3. 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

打包镜像

  1. 使用了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
  1. 没有使用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 .

  1. -t : 指定镜像的tag
  2. docker.vonedao.com/vonedao-cs/vonedao-job-admin:1.0.0

docker.vonedao.com 是镜像仓库的域名
vonedao-cs 是项目名称,便于管理镜像
vonedao-job-admin:1.0.0 是工程名称和版本号
不指定版本号则默认是laster

  1. 命令最后那个 . 是指当前

镜像信息查看

查看本地进行
# 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信息

实践

IDEA+docker插件实践

容器中安装telnet命令

docker swarm

docker swarm 是docker的官方集群模式。集群不要求机器数量。一个单机的docker也能自成一个swarm集群。

  1. 初始化集群
docker swarm init
  1. 添加节点为管理节点
swarm join-token manager

集群节点操作

Docker swarm集群增加节点和删除节点
docker swarm集群节点打标签

网络

添加网络

  1. 自定义ingress

https://www.cnblogs.com/zoujiaojiao/p/13366680.html

关于mtu :https://blog.csdn.net/passionkk/article/details/100538418

  1. 自定义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)中的,容器的网络也是不通的。

  1. 实践案例:
    如何让nacos中服务注册的ip是指定的网段
    docker容器使用swarm的网络

yaml 编排

  1. docker-compose 单机
    docker-compose容器化构建gitlab服务
  2. 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

常用命令

  1. 查看本机容器
正在运行的容器
# 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/
  1. 查看所有stack
docker stack ls
  1. 查看单个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
  1. 查看镜像
docker images 
  1. 查看镜像详情
docker inspect 镜像id
  1. 删除镜像
docker rmi 镜像id
posted @ 2020-07-24 15:41  邹姣姣  阅读(479)  评论(0编辑  收藏  举报