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 : 指定与部署和运行服务相关的配置

  • 相关阅读:
    Mac上的USB存储设备使用痕迹在新版操作系统有所变化
    Beware of the encrypted VM
    A barrier for Mobile Forensics
    Second Space could let suspect play two different roles easily
    Take advantage of Checkra1n to Jailbreak iDevice for App analysis
    Find out "Who" and "Where"
    Where is the clone one and how to extract it?
    Downgrade extraction on phones running Android 7/8/9
    高版本安卓手机的取证未来
    How to extract WeChat chat messages from a smartphone running Android 7.x or above
  • 原文地址:https://www.cnblogs.com/jay-fred/p/9956304.html
Copyright © 2011-2022 走看看