docker从入门到放弃

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker从入门到放弃相关的知识,希望对你有一定的参考价值。

Docker介绍

Docker容器技术于2013年作为开源Docker引擎推出。是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。基于 Linux 内置的 Namespace 和 CGroup 等系统内隔离机制而抽象出来的一种轻虚拟化技术。

为什么用Docker


l 更快速的交付和部署:

对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行 ,解决开发环境和生产环境不一致的问题。

l 更轻松的迁移和扩展:

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

l 更高的资源利用率(微服务)

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器

Docekr应用场景


场景一:节省项目环境部署时间

1.单项目打包

每次部署项目到测试、生产等环境,都要部署一大堆依赖的软件、工具,而且部署期间出现问题几率很大,不经意就花费了很长时间。

Docker主要理念就是环境打包部署,可在任意DockerEngine运行。前期我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建多次部署,一劳永逸。

2.整套项目打包

有一个产品可以整套部署到客户那里,以往都是派一名实施工程师到客户那部署。如果用了Docker,我们可以前期将这套项目封装打包起来,实现一键部署,分分钟钟搞定,就不需要再派人过去了。比如官方的DockerCompose编排工具。

3.新开源技术试用

直接从公共镜像仓库pull项目官方做好镜像启动容器

场景二:环境一致性

Docker将项目环境打包成镜像,可以在任何DockerEngine上浪。此时Docker就是我们这些项目的基石,Docker可移植性,保持运行状态一致性

场景三:持续集成

一个项目版本快速迭代的测试场景,需要一个合理的CI(持续集成)/CD(持续部署)环境支撑。CI/CD是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工作,很少需要人工干预。

场景四:微服务

尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统。一个容器一个服务,容器之间相互隔离

场景五:弹性伸缩

容器集群化管理已经有成熟的解决方案,比如:官方的Swarm,谷歌的K8S

容器和虚拟机


虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
Vm管理系统 Hyper-V、Xen以及KVM
https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/
windwos家庭版安装Hyper-V,放在 自定义.bat 管理员运行,重启生效

pushd "%~dp0"
dir /b %SystemRoot%servicingPackages*Hyper-V*.mum >hyper-v.txt
for /f %%i in (‘findstr /i . hyper-v.txt 2^>nul‘) do dism /online /norestart /add-package:"%SystemRoot%servicingPackages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

Docker架构设计图
技术图片

Docker概念

镜像(Image)

Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

容器(Container)

Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的。

文件系统隔离技术使得Docker成为了一个非常有潜力的虚拟化技术。在容器中可以对文件进行修改、删除、创建。

仓库(Registry)

仓库(Repository)是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。

官方仓库地址:https://hub.docker.com

Docker安装

Windwos安装

https://docs.docker.com/docker-for-windows/install/

Centos安装

关闭防火墙

systemctl stop firewalld

关闭selinux

获取selinux状态

[root@instance-xkxy07le ~]# getenforce
Disabled

关闭selinux

vim /etc/selinux/config
SELINUX=disabled

安装依赖包

yum install -y  yum-utils device-mapper-persistent-data lvm2

添加 yum 软件源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看可安装的版本

[root@instance-xkxy07le ~]# yum list docker-ce --showduplicates | sort -r
Loaded plugins: langpacks, versionlock
Installed Packages
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
docker-ce.x86_64            3:19.03.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.4-3.el7                    @docker-ce-stable
docker-ce.x86_64            3:19.03.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.3.ce-1.el7                   docker-ce-stable 
docker-ce.x86_64            17.03.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable 

yum安装docker

1. 默认安装最新版本

yum install docker-ce

2. 安装指定版本

yum install docker-ce-3:18.09.5-3.el7

启动docker

systemctl start docker

配置阿里云加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors?accounttraceid=07db9e1fa3004ddba41d91d2cfcb73a4cldn

Docker操作镜像命令

[root@instance-xkxy07le ~]# docker container --hlep
unknown flag: --hlep
See ‘docker container --help‘.

Usage:  docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container‘s changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container‘s filesystem
  exec        Run a command in a running container
  export      Export a container‘s filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Run ‘docker container COMMAND --help‘ for more information on a command.

1.查找镜像

docker search redis

2.拉取镜像

docker pull redis

3.查看本地镜像

docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              de25a81a5a0b        2 weeks ago         98.2MB

4.删除镜像

docker image rm redis

5.镜像打包成tar文件

docker image save de25a81a5a0b -o redis.tar

6.tar文件加载到镜像中

docker image load -i redis.tar

7.给image打标签

docker image tag IMAGEID  REPOSITORY:VERSION

8.删除未使用的镜像

 docker image prune

9.Dockerfile构建镜像

docker image build

10.查看镜像的详情

docker inspect

Docker操作容器命令

[root@instance-xkxy07le ~]# docker image --help
Usage:  docker image COMMAND
Manage images
Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

1.列出容器

[root@instance-xkxy07le ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
54e39c3af532        redis:latest        "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        0.0.0.0:6379->6379/tcp   amazing_sinoussi

docker container ps

-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。

输出详情介绍:

CONTAINER ID:容器 ID。
IMAGE:使用的镜像。
COMMAND:启动容器时运行的命令。
CREATED:容器的创建时间。
STATUS:容器状态。
状态有7种:
1.created(已创建)
2.restarting(重启中)
3.running(运行中)
4.removing(迁移中)
5.paused(暂停)
6.exited(停止)
7.dead(死亡)

2.创建一个新的容器并运行一个命令

[root@instance-xkxy07le ~]# docker run -p 6379:6379 -d redis:latest redis-server
54e39c3af532dc183204381a86f41ae3b7f18c754a8d5abae1f911aa83b92cea

-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-u, --user="", 指定容器的用户
-a, --attach=[], 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="", 指定容器的工作目录
-c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-m, --memory="", 指定容器的内存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[], 添加权限,权限清单详见:https://linux.die.net/man/7/capabilities
--cap-drop=[], 删除权限,权限清单详见: https://linux.die.net/man/7/capabilities
--cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[], 添加主机设备给容器,相当于设备直通
--dns=[], 指定容器的dns服务器
--dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="", 覆盖image的入口点
--env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[], 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge", 容器网络设置:
1.bridge 使用docker daemon指定的网桥
2.host //容器使用主机的网络
3.container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
4.none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no", 指定容器停止后的重启策略:
1.no:容器退出时不重启
2.on-failure:容器故障退出(返回值非零)时重启
3.always:容器退出时总是重启
--rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

2.进入容器

[root@instance-xkxy07le ~]# docker exec -it 容器名/容器id /bin/bash
root@54e39c3af532:/data# hostname
54e39c3af532 

3. 查看容器的输出日志

docker  logs  容器名

4.查看容器的资源使用

docker  stats  容器名

--no-stream

5.查看容器的具体信息

docker inspect 容器名/容器id

6.cp 拷贝文件到容器

docker cp php.ini 容器名/容器id:/

7.查看容器运行的进程

 docker top 容器名/容器

8.停止/启动/重启

docker stop/start/restart  容器名/容器

9.删除容器

docker rm  容器名/容器

10.删除所有运行的容器container

docker rm -f $(docker ps -a | awk ‘{print $1}‘)

11.更新容器资源限制

docker update 容器名/容器

–blkio-weight Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
–cpu-period Limit CPU CFS (Completely Fair Scheduler) period
–cpu-quota Limit CPU CFS (Completely Fair Scheduler) quota
–cpu-rt-period Limit the CPU real-time period in microseconds
–cpu-rt-runtime ALimit the CPU real-time runtime in microseconds
–cpu-shares , -c CPU shares (relative weight)
–cpus Number of CPUs
–cpuset-cpus CPUs in which to allow execution (0-3, 0,1)
–cpuset-mems MEMs in which to allow execution (0-3, 0,1)
–kernel-memory Kernel memory limit
–memory , -m Memory limit
–memory-reservation Memory soft limit
–memory-swap Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap
–restart Restart policy to apply when a container exits

数据持久化

将宿主机目录挂载到容器目录。

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷 可以在容器之间共享和重用
对 数据卷 的修改会立马生效
对 数据卷 的更新,不会影响镜像
数据卷 默认会一直存在,即使容器被删除

[root@instance-xkxy07le ~]# docker volume
Usage:  docker volume COMMAND
Manage volumes
Commands:
create      Create a volume
inspect     Display detailed information on one or more volumes
ls          List volumes
prune       Remove all unused local volumes
rm          Remove one or more volumes
Run ‘docker volume COMMAND --help‘ for more information on a command.

创建一个数据卷

docker volume create my-vol

查看所有的 数据卷

docker volume ls

查看指定数据卷的信息

docker volume inspect my-vol

删除数据卷

docker volume rm my-vol

无主的数据卷可能会占据很多空间,要清理请使用以下命令

docker volume prune

查看数据卷的具体信息

docker inspect web

启动一个挂载数据卷的容器

docker run  -d --name nginxweb  -p 80:80  -v /home/www:/usr/share/nginx/html  nginx 

网络模式

Docker支持五种网络模式

  • bridge
    默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中;IP地址段是172.17.0.1/16

  • host

    容器不会获得一个独立的network namespace,而是与宿主机共用一个

  • none

    获取独立的network namespace,但不为容器进行任何网络配置。

  • container

    与指定的容器使用同一个network namespace,网卡配置也都是相同的。

  • 自定义

    自定义网桥,默认与bridge网络一样。

先创建一个docker0的网桥,使用veth pair创建一对虚拟网卡,一端放到新创建的容器中,并重命名eth0,另一端放到宿主机上,以veth+随机7个字符串命名,并将这个网络设备加入到docker0网桥中,网桥自动为容器分配一个IP,并设置docker0的IP为容器默认网关。所以容器默认网络都加入了这个网桥,因此都可以彼此通信。同时在iptables添加SNAT转换网络段IP,以便容器访问外网。

容器网络访问原理

Linux IP信息包过滤原理
Docker主要通过netfilter/iptables实现网络通信。iptables由netfilter和iptables组成,netfilter组件是Linux内核集成的信息包过滤系统,它维护一个信息包过滤表,这个表用于控制信息包过滤处理的规则集。而iptables只是一个在用户空间的工具,用于增删改查这个过滤表的规则。

容器访问外部

iptables -t nat -nL 

外部访问容器

 iptables -t nat -nL 

桥接宿主机网络

临时生效:

# 网桥名称
br_name=br0
# 添加网桥
brctl addbr $br_name
# 给网桥设置IP
ip addr add 192.168.1.120/24 dev $br_name
# 删除已存在的eth0网卡配置
ip addr del 192.168.1.120/24 dev eth0
# 激活网桥
ip link set $br_name up
# 添加eth0到网桥
brctl addif $br_name eth0
还需要在Docker启动时桥接这个网桥:
vi /etc/default/docker
DOCKER_OPTS="-b=br0"
service docker restart  

永久生效

# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
auto br0
iface br0 inet static
address 192.168.1.120
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
bridge_ports eth0

配置固定IP

C_ID=$(docker run -itd --net=none ubuntu)
C_PID=$(docker inspect -f ‘{{.State.Pid}}‘ $C_ID)
# 创建network namespace目录并将容器的network namespace软连接到此目录,以便ip netns命令读取
mkdir -p /var/run/netns
ln -s /proc/$C_PID/ns/net /var/run/netns/$C_PID
# 添加虚拟网卡veth+容器PID,类型是veth pair,名称是vp+容器PID
ip link add veth$C_PID type veth peer name vp$C_PID
# 添加虚拟网卡到br0网桥
brctl addif br0 veth$C_PID
# 激活虚拟网卡
ip link set veth$C_PID up
# 设置容器网络信息
IP=‘192.168.1.123/24‘
GW=‘192.168.1.1‘
# 给进程配置一个network namespace
ip link set vp$C_PID netns $C_PID
# 在容器进程里面设置网卡信息
ip netns exec $C_PID ip link set dev vp$C_PID name eth0
ip netns exec $C_PID ip link set eth0 up
ip netns exec $C_PID ip addr add $IP dev eth0
ip netns exec $C_PID ip route add default via 192.168.1.1

一键脚本

https://github.com/jpetazzo/pipework

容器SSH连接

# docker run -itd --name test01 centos:6
# docker attach test01
/# yum install openssh-server
/# passwd root
# docker commit test01 centos6_ssh
# docker run -itd --name test03 -p 2222:22 centos6_ssh

Dockerfile

指令

指令 描述
FROM 构建的新镜像是基于哪个镜像 例如:FROM centos:6
MAINTAINER 镜像维护者姓名或邮箱地址 例如:MAINTAINER wangzhiqiang
RUN 构建镜像时运行的Shell命令 例如: RUN [“yum”, “install”, “httpd”] RUN yum install httpd
CMD 运行容器时执行的Shell命令 例如: CMD [“-c”, “/start.sh”] CMD ["/usr/sbin/sshd", "-D"] CMD /usr/sbin/sshd –D
EXPOSE 声明容器运行的服务端口 例如:EXPOSE 80 443
ENV 设置容器内环境变量 例如:ENV mysql_ROOT_PASSWORD 123456
ADD 拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动解 压 ADD … ADD [“”,… “”] ADD https://xxx.com/html.tar.gz /var/www/html ADD html.tar.gz /var/www/html
COPY 拷贝文件或目录到镜像,用法同上 例如:COPY ./start.sh /start.sh
ENTRYPOINT 运行容器时执行的Shell命令 例如: ENTRYPOINT [“/bin/bash", “-c", “/start.sh"] ENTRYPOINT /bin/bash -c ‘/start.sh’
VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器 例如: VOLUME ["/var/lib/mysql"]
USER 为RUN、CMD和ENTRYPOINT执行命令指定运行用户 USER [:] or USER [:] 例如:USER wangzhiqiang
WORKDIR 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录 例如:WORKDIR /data
HEALTHCHECK 健康检查 HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/
ARG 在构建镜像时指定一些参数 例如: FROM centos:6 ARG user # ARG user=root USER $user # docker build --build-arg user=wangzhiqiang Dockerfile .

CMD和ENTRYPOINT指令区别

  1. RUN在building时运行,可以写多条
  2. CMD和ENTRYPOINT在运行container时运行,只能写一条,如果写多条,最后一条生效。
  3. CMD在run时可以被COMMAND覆盖,ENTRYPOINT不会被COMMAND覆盖,但可以指定—entrypoint覆盖。

Build镜像命令

使用Dockerfile文件构建镜像

Usage: docker build [OPTIONS] PATH | URL | -
Options:
-t, --tag list # 镜像名称
-f, --file string # 指定Dockerfile文件位置

公共镜像仓库使用

1、注册账号
https://hub.docker.com
2、登录Docker Hub
# docker login
或
# docker login --username=lizhenliang --password=123456
3、镜像打标签
# docker tag wordpress:v1 lizhenliang/wordpress:v1
4、上传
# docker push lizhenliang/wordpress:v1
搜索测试:
# docker search lizhenliang
5、下载
# docker pull lizhenliang/wordpress:v1

搭建私有仓库

Docker Hub作为Docker默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓 库非常简单。

下载registry镜像并启动
# docker pull registry
# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
测试,查看镜像仓库中所有镜像
# curl http://192.168.1.120:5000/v2/_catalog
{"repositories":[]}
配置私有仓库可信任
# vi /etc/docker/daemon.json
{"insecure-registries":["192.168.1.120:5000"]}
# service docker restart
打标签
# docker tag centos:6 192.168.1.120:5000/centos:6
上传
# docker push 192.168.1.120:5000/centos:6
下载
# docker pull 192.168.1.120:5000/centos:6
列出镜像标签
# curl http://192.168.1.120:5000/v2/centos/tags/list

以上是关于docker从入门到放弃的主要内容,如果未能解决你的问题,请参考以下文章

docker从入门到放弃

Docker 从入门到放弃Docker+Jenkins_自动化持续集成

clickhouse从入门到放弃

clickhouse从入门到放弃

clickhouse从入门到放弃

clickhouse从入门到放弃