zoukankan      html  css  js  c++  java
  • Docker学习整理

    docker 容器
    阿里云docker安装脚本:curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
    DaoCloud 的安装脚本:curl -sSL https://get.daocloud.io/docker | sh
    镜像:特殊的文件系统,由多层文件系统组成,提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
    容器:容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
    仓库:集中的存储、分发镜像的服务,一个仓库会包含同一个软件不同版本的镜像


    安装:
    1.获取docker-ce(社区版)源:
    wget http://mirrors.aliyun.com/repo/Centos-7.repo
    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2.加速缓存: yum makecache fast
    3.安装docker-ce : yum -y install epel-release
    yum -y install docker-ce
    4.启动docker :systemctl enable docker
    systemctl start docker
    5.添加内核参数 :tee -a /etc/sysctl.conf <<-EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl -p
    6.添加镜像加速器 : vim /etc/docker/daemon.json
    {
    "registry-mirrors": [
    "https://registry.docker-cn.com"
    ]
    }
    或者:vim /var/lib/systemd/system/docker.service
    --insecure-registry=0.0.0.0:5000
    7.重启docker :systemctl daemon-reload
    systemctl restart docker

    8.安装依赖包:yum install -y yum-utils device-mapper-persistent-data lvm2
    9.添加用户和组:groupadd docker
    usermod -aG docker $USER
    10.测试;docker run hello-world

    镜像image:
    8.列出镜像 :docker image ls
    8.查找镜像 :docker search centos
    9.获取镜像 :docker pull IP:5000/ubuntu(仓库名):16.04(标签)
    9.打标签镜像 :docker tag ubuntu:17.10(原有) IP:端口/ubuntu:17.10
    docker push username/ubuntu:17.10

    10.运行镜像 :docker run -it --rm ubuntu:16.04 bash :-i交互式操作, -t终端, bash执行一些命令并查看返回结果,
    --rm :这个参数是说容器退出后随之将其删除
    11.查看系统版本 :cat /etc/os-release
    13.查看镜像占用空间 :docker system df
    14.查看虚悬镜像 :docker image ls -f dangling=true


    15.删除虚悬镜像 :docker image prune
    16.删除镜像(一般做法) ,一个镜像可能指向多个标签: docker image rm 镜像ID/镜像名
    17.精确删除镜像 :docker image ls --digests redis
    docker image rm node@sha 或 docker image rm $(docker image ls -q redis)
    18.列出指定范围的ID列表 :docker image ls -q

    运行镜像 : docker run --name webserver -d -p 80:80 nginx :用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口
    20.修改Nginx主页 : docker exec -it webserver bash
    echo '<h1>hello,Docker!</h1>' > /usr/share/nginx/html/index.html
    21.查看镜像改动 : docker diff webserver
    22.保存镜像 :docker commit --author "Huang <hcf@gmail.com>" --message "change web html" webserve nginx:v2
    23.查看镜像内历史记录 :docker history nginx:v2
    24.运行定制镜像 : docker run --name=web2 -it --rm -p 8080:8080 nginx:v2
    docker run -p 8008:8080 tomcat

    Dockerfile定制镜像;创建Dockerfile文件,
    FROM nginx (以哪个镜像为基础)
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html (每一个RUN行为都会创建一层镜像,有多个时用&&)
    25.在Dockerfile目录下构建 : docker build -t nginx:v3 .



    容器:
    26.查看容器 :docker container ls
    27.停止容器 :docker container stop 容器ID
    socker stop $(docker ps -q)
    28.启动容器 : docker container start 容器ID
    29.进入容器 : (1)attach (退出时会停止容器)
    docker run -dit ubuntu :-d,容器启动进入后台
    docker container ls
    docker attach 容器ID
    (2)exec(退出时不会停止容器)
    docker run -dit ubuntu
    docker container ls
    docker exec -it 容器ID /bin/bash(不加t没有终端)
    30.导出容器 :docker export 容器ID > 容器名.tar
    31.删除容器 : docker container rm 容器ID
    32.导入容器 :cat 容器.tar | docker import - 容器名:v1.0
    33.清理所有停止状态的容器 :docker container prune

    仓库(本地):31.创建存放镜像仓库目录 :mkdir /opt/data
    32.安装仓库工具 :docker run -d -p 5000:5000 -v /opt/data/registry(指定路径):/var/lib/registry(默认路径) registry
    38.配置加速器 :vim /etc/docker/daemon.json
    vim /usr/lib/systemd/system/docker.service
    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.12.28:5000

    39.重启 :systemctl daemon-reload
    systemctl restart docker.service
    33.自定义镜像 :docker tag centos:latest 127.0.0.1:5000/centos:latest
    35.上传镜像 :docker push 127.0.0.1:5000/centos:latest
    36.查看 :curl 192.168.12.199:5000/v2/
    http://192.168.12.199:5000/v2(仓库版本)/_catalog
    37.下载镜像 :docker pull 127.0.0.1:5000/ubuntu:latest
    38. find / -name config.yml
    39. filesystem:
    rootdirectory: /var/lib/registry
    delete:
    enabled: true
    40.删除仓库镜像:curl -XGET http://192.168.11.196:5000/v2/httpd/tags/list
    curl -v -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X HEAD http://192.168.11.196:5000/v2/httpd/manifests/v1
    curl -XDELETE 192.168.11.196:5000/v2/httpd/manifests/sha256:6c2906f645126a744fdb79031b02d419fa977f8479174c0b63ca45513247cd1a


    数据卷:
    34.查看数据卷 :docker volume ls
    35.创建数据卷 ;docker volume create my-vol
    36.查看指定数据卷 :docker volume inspect my-vol
    37.删除数据卷 :先停容器,删容器,再删数据卷 :docker volume rm
    38.挂载数据卷 :docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py
    39.挂载只读数据卷 :docker run -d -P --name web --mount type=bind,source=/src/webapp,target=/opt/webapp,readonly training/webapp python app.py
    40.挂载本地数据卷到镜像 :docker run -it -v /usr/share/logstash/data:/usr/share/logstash/data:rw logstash:v1 /bin/bash

    网络:
    40.查看容器端口映射 :docker container ls
    41.将本地端口5000映射到容器端口5000 :docker run -d -p 5000:5000 training/webapp python app.py
    42.查看映射端口配置 : docker container ls
    docker port nostalgic_morse 5000
    43.创建docker网络 : docker network create -d bridge my-net
    44.运行一个容器并连接到网络 :docker run -it --rm --name busybox1 --network my-net busybox sh
    45.运行第二个容器连接到网络 :docker run -it --rm --name busybox2 --network my-net busybox sh

    docker-compose:是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用。
    46.获取二进制包 :curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    47.给予执行权限 : chmod +x /usr/local/bin/docker-compose
    48.compose项目包含三部分 :app.py, Dokcerfile, docker-compose.yml(version,services,web,build,ports,redis,image....)
    49.运行compose项目 : docker-compose up
    50.查看日志 :docker logs -f -t --tail 行数 容器名

    docker-machine :是支持多平台安装Docker的工具,使用 Docker Machine,可以很方便地在笔记本、云平台及数据中心里安装Docker。
    49.安装virtualbox驱动:
    [virtualbox]
    name=Oracle Linux/RHEL/CentOS-$releasever/$basearch-VirtualBox
    baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
    50.查找virtualbox:yum search virtualbox
    50.安装最新版:yum -y install VirtualBox-5.2.x86_64
    50.初始化:/sbin/vboxconfig
    51.安装内核:yum -y install kernel-devel kernel-devel-3.10.0-862.el7.x86_64
    50.初始化:/sbin/vboxconfig
    50.安装 :curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && install /tmp/docker-machine /usr/local/bin/docker-machine
    51查看版本 :docker-machine -v
    52.创建docker管理主机 :docker-machine create -d virtualbox manager

    docker-swarm集群:
    一、单节点主机使用virtualbox驱动创建集群:
    1.创建docker管理主机 :docker-machine create -d virtualbox manager
    --engine-opt dns=114.114.114.114 配置 Docker 的默认 DNS
    --engine-registry-mirror https://registry.docker-cn.com 配置 Docker 的仓库镜像
    --virtualbox-memory 2048 配置主机内存
    --virtualbox-cpu-count 2 配置主机 CPU
    2.查看管理主机环境: docker-machine env manager
    3.远程到管理主机 :docker-machine ssh manager
    4.初始化IP:docker swarm init --advertise-addr 192.168.99.100(记住返回秘钥信息,用于加入集群认证)
    5.创建工作节点:docker-machine create -d virtualbox worker1
    6.登录到工作主机 :docker-machine ssh worker1
    7.加入集群 :docker swarm join --token SWMTKN-1-6blwl0474odjjsln41geym4n87ba4czrmy00ojn6h5k2nm20mc-b9llptcgnc23wrhtyk7nr9wda 192.168.99.100:2377
    8.查看连接令牌:docker swarm join-token manager
    8.查看集群节点:docker-machine ls
    9.删除:docker-machine rm -f $(docker-machine ls -q)
    9.查看leader节点:docker node ls
    10.删除swarm集群: docker swarm leave --force
    11.删除节点:docker node rm worker1
    12.管理节点部署Nginx :docker service create --replicas 3(docker主机数) -p 80:80 --name nginx nginx:1.13.7-alpine(版本)
    13.查看服务(管理) :docker service ls / docker service ps nginx
    14.启动服务 :docker service update 服务名
    15.查看日志 :docker service logs nginx
    16.扩容服务(容器) :docker service scale nginx=5(先分给manager,再给worker)
    docker service ps nginx
    17.收缩服务(容器) :docker service scale nginx=2
    docker service ps nginx
    18.删除服务(容器) :docker service rm nginx
    19.docker-swarm部署compose: docker stack deploy -c docker-compose.yml wordpress
    20.查看docker-compose服务: docker stack ls
    21.删除服务 : docker stack rm
    22.swarm集群管理敏感数据 : openssl rand -base64 20 | docker secret create mysql_password -
    openssl rand -base64 20 | docker secret create mysql_root_password -
    23.查看密码 :docker secret ls
    24.创建MySQL服务 : docker network create -d overlay mysql_private
    25.升级 : docker service update --image nginx:1.13.12-alpine nginx
    26.回退 :docker service rollback nginx

    二、多节点主机swarm集群
    获取yum源: # cd /etc/yum.repos.d/
    # mv CentOS-Base.repo CentOS-Base.repo.bak
    # wget http://mirrors.aliyun.com/repo/Centos-7.repo
    # wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    # yum clean all
    # yum makecache
    安装网络工具和基础包:# yum install net-tools checkpolicy gcc dkms foomatic openssh-server bash-completion -y
    修改hostname:# hostnamectl --static set-hostname c1
    设置免密登录:# ssh-keygen
    # vi /etc/ssh/sshd_config
    RSAAuthentication yes
       PubkeyAuthentication yes
       AuthorizedKeysFile .ssh/authorized_keys
    #ssh-copy-id c1
    #ssh-copy-id c2
    安装docker:# mkdir -p ~/_src
    && cd ~/_src
    && wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.3-1.el7.centos.noarch.rpm
    && wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.3-1.el7.centos.x86_64.rpm
    && wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-1.12.3-1.el7.centos.x86_64.rpm
    && yum localinstall -y docker-engine-selinux-1.12.3-1.el7.centos.noarch.rpm docker-engine-1.12.3-1.el7.centos.x86_64.rpm docker-engine-debuginfo-1.12.3-1.el7.centos.x86_64.rpm
    # docker version
    # systemctl enable docker && systemctl start docker
    修改docker配置文件:# vi /lib/systemd/system/docker.service
    ExecStart=/usr/bin/dockerd -s=overlay --registry-mirror=https://7rgqloza.mirror.aliyuncs.com --insecure-registry=localhost:5000 -H unix:///var/run/docker.sock --pidfile=/var/run/docker.pid
    # systemctl daemon-reload && systemctl restart docker.service
    开启防火墙端口:# firewall-cmd --zone=public --add-port=2377/tcp --permanent &&
    firewall-cmd --zone=public --add-port=7946/tcp --permanent &&
    firewall-cmd --zone=public --add-port=7946/udp --permanent &&
    firewall-cmd --zone=public --add-port=4789/tcp --permanent &&
    firewall-cmd --zone=public --add-port=4789/udp --permanent &&
    firewall-cmd --reload
    # firewall-cmd --list-ports
    初始化swarm:# docker swarm init --advertise-addr 192.168.11.199(c1的ip)
    c2加入集群
    设置c2为主节点:# docker swarm leave
    c1: # docker swarm join-token manager



    docker集中化web管理平台
    一、shipyard
    1.启动docker,下载镜像
    # systemctl restart docker
    # docker pull alpine
    # docker pull microbox/etcd
    # docker pull library/rethinkdb
    # docker pull shipyard/docker-proxy
    # docker pull swarm
    # docker pull shipyard/shipyard

    2.下载shipyard脚本
    # wget https://raw.githubusercontent.com/shipyard/shipyard-project.com/master/site/themes/shipyard/static/deploy
    # bash deploy
    # http://192.168.11.199:8080

    3.优点
    # 支持镜像管理、容器管理。
    # 支持控制台命令
    # 容器资源消耗监控
    # 支持集群swarm,可以随意增加节点
    # 支持控制用户管理权限,可以设置某个容器对某个用户只读、管理权限。
    # 有汉化版
    4.缺点
    # 启动容器较多,占用每个节点的一部分资源
    # 兼容性性不高,可能是我自身原因,经常打不开首页。

    二、portainer
    1.下载镜像
    docker pull docker.io/portainer/portainer

    2.启动
    # docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test portainer/portainer
    # http://192.168.11.199:9000

    3.优点
    # 支持容器管理、镜像管理
    # 轻量级,消耗资源少
    # 基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。
    # 支持权限分配
    # 支持集群
    4.缺点
    # 功能不够强大。
    # 容器创建后,无法通过后台增加端口。

    三、dockerUI
    1.下载镜像
    # docker pull uifd/ui-for-docker

    2.启动
    # docker run -it -d --name docker-web -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock docker.io/uifd/ui-for-docker
    # http://192.168.11.199:9000
    3.优点
    # 支持容器管理
    # 支持镜像管理
    # 基于docker api,自身也是一个容器。
    # 稳定性高
    # 可动态显示显示容器之间关系图
    # 容器管理,增加端口映射,增加系统变量、映射目录等
    4.缺点
    # 没有登录验证,因为没有登录体系,目前解决办法是,只开放本地访问,或者通过TLS来对权限进行控制。
    # 无法分配某容器给某用户。
    # 不支持多主机。
    # 不支持集群swarm等
    # 功能少
    # 不支持控制台命令

    etcd : 是 CoreOS 团队发起的一个管理配置信息和服务发现的项目,它的目标是构建一个高可用的分布式键值( key-value )数据库,端口号2379 、2380
    下载: curl -L https://github.com/coreos/etcd/releases/download/v3.2.10/etcd-v3.2.10-linux-amd64.tar.gz -o etcd-v3.2.10-linux-amd64.tar.gz
    解压: tar zxvf etcd-v3.2.10-linux-amd64.tar.gz
    进入相关目录: cd etcd-v3.2.10-linux-amd64
    拷贝到可执行目录: cp etcd* /usr/local/bin/
    启动服务: etcd
    检查是否启动成功: etcdctl member list
    设置环境变量: echo 'export ETCDCTL_API=3' >>/etc/profile
    测试: etcdctl put testkey(键) "hello world"(值)
    获取: etcdctl get testkey

    docker中 启动所有的容器命令
    docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

    docker中 关闭所有的容器命令
    docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

    docker中 删除所有的容器命令
    docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)

    docker中 删除所有的镜像
    docker rmi $(docker images | awk '{print $3}' |tail -n +2)


    Dockerfile命令
    1.FROM :指定基础镜像(必须第一条)
    2.RUN :运行指定命令
    3.CMD :容器启动时运行的命令
    4.LABEL :为镜像指定标签
    5.MAINTAINER : 指定作者
    6.EXPOSE : 暴露容器运行时监听端口给外部
    7.ENV :指定环境变量
    8.ADD :复制,将文件复制到镜像中
    9.COPY :复制
    10.ENTRYPOINT : 启动时的默认命令
    11.VOLUME : 将内地文件夹或者其他容器种得文件夹挂在到这个容器中
    12.USER :设置启动容器的用户,可以是用户名或UID
    13.WORKDIR :设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。
    14.ARG :设置变量命令
    15.ONBUILD : 这个命令只对当前镜像的子镜像生效。
    16.STOPSIGNAL : 当容器推出时给系统发送什么样的指令
    17.HEALTHCHECK : 容器健康状况检查命令
    18.docker history 镜像名 : 逆向查看dockerfile构建过程


    Docker-compose命令
    1. version :指定版本号
    2. services :服务
    3. build :指定 Dockerfile 所在文件夹的路径
    4. cap_add :指定容器的内核能力(capacity)分配。
    5. command :覆盖容器启动后默认执行的命令。
    6. container_name :指定容器名称
    7. devices :指定设备映射关系。
    8. depends_on :解决容器的依赖、启动先后的问题
    9. dns :自定义 DNS 服务器。可以是一个值,也可以是一个列表
    10. dns_search :配置 DNS 搜索域。可以是一个值,也可以是一个列表。
    11. tmpfs :挂载一个 tmpfs 文件系统到容器。
    12. env_file :从文件中获取环境变量,可以为单独的文件路径或列表。
    13. environment :设置环境变量
    14. expose : 暴露端口,但不映射到宿主机,只被连接的服务访问。
    15. image :指定为镜像名称或镜像 ID。如果镜像在本地不存在, Compose 将会尝试拉取这个镜像。
    16. labels :为容器添加 Docker 元数据(metadata)信息
    17. logging :配置日志选项。
    18. network_mode :设置网络模式。
    19. networks :配置容器连接的网络。
    20. pid :跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作。
    21. ports :暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
    22. secrets :存储敏感数据。
    23. sysctls :配置容器内核参数。
    24. ulimits :指定容器的 ulimits 限制值。
    25. volumes :数据卷所挂载路径设置
    26. deploy : 指定与部署和运行服务相关的配置

  • 相关阅读:
    【leetcode_easy_greedy】1403. Minimum Subsequence in Non-Increasing Order
    【leetcode_easy_sort】1030. Matrix Cells in Distance Order
    word2010 标题编号
    WORD2013中如何使用多级列表自动编号(转)
    Javaweb权限管理设计思路 (转)
    前后端分离模式下的权限设计方案 (转)
    Axure rp8.1.0.3381 3382 激活码(2019-07-26 亲测可用) 转
    通达OA开发网址
    C# Winform 跨线程更新UI控件常用方法汇总 (转)
    C#中的Invoke
  • 原文地址:https://www.cnblogs.com/jay-fred/p/9956304.html
Copyright © 2011-2022 走看看