关于docker
 Docker 是一个开源的应用容器引擎
 优点:开箱即用,快速部署,可移植性强,环境隔离
 应用场景:
 1.节省项目环境部署时间(单项目打包、整套项目打包、新开源技术)
 2.环境一致性(windows\linux)
 3.持续集成(CI/CD 持续集成/持续部署 是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工作,不需要人工干预,Docker结合Jenkins构建持续集成环境)
 4.微服务
 5.弹性伸缩
Docker 仓库管理
 docker hub
 https://hub.docker.com/
 目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
 操作:
 1.登录
 docker login
 2.搜索镜像
 docker search search_name
 根据是否是官方提供,可将镜像资源分为两类。
 一种是基础镜像或根镜像。这些基础镜像由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字,例如nginx。
 还有一种类型,比如 webdevops/php-nginx 镜像,它是由 Docker 的用户创建并维护 的,往往带有用户名称前缀。
 3.拉取镜像
 docker pull images_name
 4.推送镜像 tag版本号
 docker push username/images_name:tag
 5.退出登录
 docker logout
1.安装docker
 sudo apt install curl
 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
fangjian@ubuntu:~$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
- sudo -E sh -c ‘apt-get update -qq >/dev/null’
 - sudo -E sh -c ‘DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null’
 - sudo -E sh -c ‘curl -fsSL “https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg” | gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg’
gpg: WARNING: unsafe ownership on homedir ‘/home/fangjian/.gnupg’ - sudo -E sh -c ‘echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable” > /etc/apt/sources.list.d/docker.list’
 - sudo -E sh -c ‘apt-get update -qq >/dev/null’
 - sudo -E sh -c ‘DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce-cli docker-scan-plugin docker-ce >/dev/null’
 - version_gte 20.10
 - ‘[’ -z ‘’ ‘]’
 - return 0
 - sudo -E sh -c ‘DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null’
 - sudo -E sh -c ‘docker version’
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:27 2021
OS/Arch: linux/amd64
Context: default
Experimental: true 
Server: Docker Engine - Community
 Engine:
 Version: 20.10.12
 API version: 1.41 (minimum version 1.12)
 Go version: go1.16.12
 Git commit: 459d0df
 Built: Mon Dec 13 11:43:36 2021
 OS/Arch: linux/amd64
 Experimental: false
 containerd:
 Version: 1.4.12
 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
 Version: 1.0.2
 GitCommit: v1.0.2-0-g52b36a2
 docker-init:
 Version: 0.19.0
 GitCommit: de40ad0
================================================================================
To run Docker as a non-privileged user, consider setting up the
 Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
 
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
 users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
 to root access on the host. Refer to the ‘Docker daemon attack surface’
 documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
fangjian@ubuntu:~$
2.测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:
 $ sudo docker run hello-world
fangjian@ubuntu:~$ sudo docker run hello-world
 Unable to find image ‘hello-world:latest’ locally
 latest: Pulling from library/hello-world
 2db29710123e: Pull complete
 Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a
 Status: Downloaded newer image for hello-world:latest
Hello from Docker!
 This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
- The Docker client contacted the Docker daemon.
 - The Docker daemon pulled the “hello-world” image from the Docker Hub.
(amd64) - The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading. - The Docker daemon streamed that output to the Docker client, which sent it
to your terminal. 
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/get-started/
fangjian@ubuntu:~$
3.查看docker命令
 输入 docker 命令来查看到 Docker 客户端的所有命令选项
 通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
4.容器使用
 //获取镜像
 docker pull ubuntu
 //启动容器
 docker run -it ubuntu /bin/bash
 参数说明:
 -i: 交互式操作。
 -t: 终端。
 ubuntu: ubuntu 镜像。
 /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
 要退出终端,直接输入 exit:
//查看所有容器
 docker ps -a
//启动已经停止运行的容器
 docker start container_id
//后台运行 -d 指定容器的运行模式
 docker run -itd --name ubuntu-test ubuntu /bin/bash
 加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
//停止一个容器
 docker stop container_id
 //停止的容器可以重启
 docker restart container_id
//在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器
 //进入容器
 docker attach container_id (从这个容器退出,会导致容器的停止)
 docker exec -it container_id /bin/bash (从这个容器退出,不会导致容器的停止)
//导出容器
 docker export container_id > ubuntu.tar
 //导入容器快照 将快照文件ubuntu.tar导入到镜像test/ubuntu:v1
 cat ubuntu.tar | docker impoat - test/ubuntu:v1
//通过指定url或者某个目录导入
 docker import http://example.com/exampleimage.tgz example/imagerepo
//删除容器 当容器是停止的
 docker rm -f container_id
//清理所有处于终止状态的容器
 docker container prune
5.镜像使用
 用 docker images 来列出本地主机上的镜像
 选项说明:
 REPOSITORY:表示镜像的仓库源
 TAG:镜像的标签
 IMAGE ID:镜像ID
 CREATED:镜像创建时间
 SIZE:镜像大小
//运行指定tag容器
 docker run -t -i ubuntu:15.10 /bin/bash
//获取指定tag镜像
 docker pull ubuntu:13.10
//查找镜像 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
 docker search httpd
 NAME: 镜像仓库源的名称
 DESCRIPTION: 镜像的描述
 OFFICIAL: 是否 docker 官方发布
 stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
 AUTOMATED: 自动构建。
//拉取镜像
 docker pull httpd
//删除镜像
 docker rmi REPOSITORY_NAME(就是image_name)
//更新镜像
 在已知镜像中做修改,然后再更新镜像并且提交这个镜像
 1.更新镜像之前,我们需要使用镜像来创建一个容器。
 runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
 root@e218edb10161:/#
 2.在这个容器做修改,在运行的容器内使用 apt-get update 命令进行更新。
 3.在完成操作之后,输入 exit 命令来退出这个容器。
 此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。
 4.我们可以通过命令 docker commit 来提交容器副本。
 runoob@runoob:~$ docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2
 sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
 各个参数说明:
 -m: 提交的描述信息
 -a: 指定镜像作者
 e218edb10161:容器 ID
 runoob/ubuntu:v2: 指定要创建的目标镜像名
 5.我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
 6.使用我们的新镜像 runoob/ubuntu 来启动一个容器
 runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash
//构建镜像
 我们使用命令 docker build , 从零开始来创建一个新的镜像。
 为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
docker build -t runoob/centos:6.7 ./Dockerfile
 参数说明:
 -t :指定要创建的目标镜像名
 ./Dockerfile:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
 设置镜像标签
 docker tag 860c279d2fec runoob/centos:dev
//push 失败
 fangjian@ubuntu:~$ sudo docker push fangjian98/ubuntu:laster
 The push refers to repository [docker.io/fangjian98/ubuntu]
 An image does not exist locally with the tag: fangjian98/ubuntu
这里需要将ubuntu:v1镜像改名,在名称前加上自己的docker hub的Docker ID,即wangshibo
 [root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1
 [root@docker-test1 ~]# docker images
 REPOSITORY TAG IMAGE ID CREATED SIZE
 myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB
 wangshibo/myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB
 docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
 再次进行推送(注意:下面的v1的tag标签可以不打,默认是latest)。推送操作时间稍微会有一点长,耐心等待~
本机删除这个镜像
 [root@docker-test1 ~]# docker images
 REPOSITORY TAG IMAGE ID CREATED SIZE
 myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
 wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
 docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
注意上面有两个6ce4aedd12cd的镜像ID,此时直接使用这个镜像ID是删除不掉的
 [root@docker-test1 ~]# docker rmi 6ce4aedd12cd
 Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories
应该先删除docker tag改名前的镜像,使用镜像名称删除。(一般在docker tag镜像改名后,最好删除改名前的镜像)
 [root@docker-test1 ~]# docker rmi myubuntu:v1
//镜像保存/载入
 docker save
 docker load
//容器导入/导出
 docker import
 docker export
这时候需要敲:apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
 更新完毕以后再敲命令:apt-get install vim命令即可。
//参考
 https://www.runoob.com/docker/










