Linux学习24-docker相关

Linux学习24-docker相关 docker简介Docker 是一个基于 Go 语言开发的开源容器化平台由 Solomon Hykes 于 2013 年首次发布现由 Docker, Inc. 维护它通过操作系统级别的虚拟化技术将应用程序及其所有依赖项运行时、系统工具、库、配置文件等打包为一个轻量级、可移植的标准化单元——容器Container从而实现一次构建随处运行的交付目标核心架构Docker 采用 客户端-服务端Client-Server 架构Docker Daemondockerd运行在宿主机上的后台守护进程负责镜像的构建、容器的创建与管理、网络配置、存储卷挂载等核心操作。Docker Clientdocker CLI用户与 Docker 交互的命令行工具通过 REST API 与 Daemon 通信发送指令并接收响应。Registry镜像仓库集中存储和分发镜像的服务Docker Hub 是其官方公共仓库企业通常部署私有仓库如 Harbor用于内部镜像管理。docker部署配置yum源安装yum工具下载docker社区版启动服务下载管理网络桥接的工具包查看docker配置 Linux 内核的网络参数为 Docker 运行做前置准备让经过桥接网卡的 IPv4 流量也走 iptables 规则使Docker 的端口映射、容器隔离等网络功能正常工作针对ipv6开启 IP 转发。允许宿主机把数据包从一个网卡转发到另一个网卡允许容器访问外网重新加载配置文件使修改生效使用从指定的镜像仓库docker.1ms.run中搜索yakexi007所有公开的镜像从镜像仓库下载拉取mario镜像到本地拉取完成后运行镜像在浏览器访问该机ip即可docker run -d --name demo -p 80:80 docker.1ms.run/yakexi007/mario可以使用docker ps查看镜像情况docker基本概念镜像ImageDocker镜像Image就是一个只读的模板、一个标准化包。镜像可以用来创建Docker容器一个镜像可以创建很多容器。镜像内包含操作系统提供容器运行时所需的所有文件、二进制文件、库和配置等文件外还包含了一些为运行时准备的一些配置参数如环境变量、用户等。镜像不包含任何动态数据其内容在构建之后也不会被改变镜像有两个重要原则镜像是不可变的。镜像一旦创建就无法修改。您只能创建新镜像或在其上添加更改。容器镜像由层组成。每层代表一组添加、删除或修改文件的文件系统更改。容器Container通过镜像创建Docker利用容器Container独立运行的一个或一组应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境包括root用户权限、进程空间、用户空间和网络空间等和运行在其中的应用程序。容器的实质是进程但与直接在宿主执行的进程不同容器进程运行于属于自己的独立的空间因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里使用起来就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。容器的定义和镜像几乎一模一样也是一堆层的统一视角唯一区别在于容器的最上面那一层是可读可写的。仓库存放镜像的地方仓库类似于应用商店存放的是docker镜像分为公开仓库跟私有仓库。通常仓库可以包含同一个软件不同版本的镜像而标签就常用于对应该软件的各个版本。我们可以通过镜像名:标签的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签将以latest作为默认标签。仓库Repository是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器Registry混为一谈并不严格区分。实际上仓库注册服务器上往往存放着多个仓库每个仓库中又包含了多个镜像每个镜像有不同的标签tag。Docker使用C/S架构Client通过接口与Server进程通信实现容器的构建运行和发布。client和server可以运行在同一台集群也可以通过跨主机实现远程通信。docker仓库docker hub首先注册账号 https://hub.docker.com/新建仓库客户端登录docker hub[rootserver1 ~]# docker loginLogin with your Docker ID to push and pull images from Docker Hub. If you dont have a Docker ID, head over to https://hub.docker.com to create one.Username: yakexi007 #docker hub注册的用户Password: **** #密码WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seedocker login | Docker DocsLogin Succeeded上传镜像[rootserver1 ~]# docker tag webserver:v4 yakexi007/webserver:v4[rootserver1 ~]# docker push yakexi007/webserver:v4The push refers to repository [docker.io/yakexi007/webserver]bbed3d4e37e0: Pushed0b3d0512394d: Pushed5b1fa8e3e100: Pushedv4: digest: sha256:013969b9116df5dc77ddaef6c500129439e9db94f46b61b148b43e53900623e5 size: 949registry私有仓库官网Deprecated and retired Docker products and features | Docker Docs拉取registry镜像docker pull registry运行registry仓库docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry列出容器docker ps -l配置仓库自启动vim/etc/systemd/system/registry.service内容如下[Unit]DescriptionRegistryRequiresdocker.serviceAfterdocker.service[Service]TypesimpleRestartalwaysExecStart/usr/bin/docker start -a registryExecStop/usr/bin/docker stop registry[Install]WantedBymulti-user.target刷新配置systemctl daemon-reload停止容器docker stop registry设置开机自启systemctl enable --now registrydocker ps -l上传镜像docker tagbusybox:latest localhost:5000/busybox:latestdocker push localhost:5000/busybox查询镜像[rootserver1 ~]# curlhttp://localhost:5000/v2/_catalog{repositories:[busybox]}[rootserver1 ~]#curlhttp://localhost:5000/v2/busybox/tags/list{name:busybox,tags:[latest]}下载镜像[rootserver1 ~]# docker pull localhost:5000/busyboxinsecure registry配置使用非加密端口(替换为实际仓库IP)[rootserver2 ~]# vim /etc/docker/daemon.json{insecure-registries : [http://192.168.56.11:5000]}[rootserver2 docker]# systemctl restart docker拉取镜像[rootserver2 docker]# docker pull 192.168.56.11:5000/nginx仓库加密下载并升级软件包Rocky Linux 9 无需安装https://mirrors.aliyun.com/epel/7/x86_64/Packages/o/openssl11-1.1.1k-7.el7.x86_64.rpmhttps://mirrors.aliyun.com/epel/7/x86_64/Packages/o/openssl11-libs-1.1.1k-7.el7.x86_64.rpm[rootserver1 ~]# yum install -y openssl11-1.1.1k-7.el7.x86_64.rpm openssl11-libs-1.1.1k-7.el7.x86_64.rpm添加域名解析[rootserver1 ~]# vim /etc/hosts...192.168.56.11 server1 reg.westos.org[rootserver1 ~]# mkdir certs[rootserver1 ~]# openssl11 req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -addext subjectAltName DNS:reg.westos.org -x509 -days 365 -out certs/westos.org.crt域名保持一致[rootserver1 ~]# docker run -d -p 443:443 --restartalways --name registry -v /opt/registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY/certs/westos.org.key registry部署客户端证书不然会报错[rootserver1 ~]# docker tag nginx:latest reg.westos.org/nginx:latest[rootserver1 ~]# docker push reg.westos.org/nginx:latest The push refers to repository [reg.westos.org/nginx]Get https://reg.westos.org/v2/: x509: certificate signed by unknown authority[rootserver1 ~]# mkdir -p /etc/docker/certs.d/reg.westos.org/[rootserver1 ~]# cp /root/certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt验证[rootserver1 ~]# docker push reg.westos.org/nginx:latest[rootserver1 reg.westos.org]# curl -k https://reg.westos.org/v2/_catalog{repositories:[nginx]}仓库认证[rootserver1 ~]# yum install -y httpd-tools[rootserver1 ~]# mkdir auth[rootserver1 ~]# htpasswd -Bc auth/htpasswd adminNew password:Re-type new password:Adding password for user admin第二次添加不要加“-c”选项不然会覆盖[rootserver1 ~]# htpasswd -B auth/htpasswd wxhNew password:Re-type new password:Adding password for user wxh[rootserver1 ~]# cat auth/htpasswdadmin:$2y$05$Wm2LHttPY5a6i2KMG0fShe92d/PjnaBbGitiClcE3wqHmwO8dIDFmwxh:$2y$05$9rE9CXyZ1fdcMammhh7f6.soDHgKdSsi0DXBgkRW5sKRw5sEJo1lK删除registry重建[rootserver1 ~]# docker rm -f registry[rootserver1 ~]# docker run -d -p 443:443 --restartalways --name registry -v /opt/registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY/certs/westos.org.key -v /root/auth:/auth -e REGISTRY_AUTHhtpasswd -e REGISTRY_AUTH_HTPASSWD_REALMRegistry Realm -e REGISTRY_AUTH_HTPASSWD_PATH/auth/htpasswd registry登录仓库不然无法上传下载[rootserver1 ~]# docker login reg.westos.orgUsername: adminPassword:WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[rootserver1 ~]# cat .docker/config.json{auths: {reg.westos.org: {auth: YWRtaW46d2VzdG9z}}}验证[rootserver1 ~]# docker tag busybox:latest reg.westos.org/busybox:latest[rootserver1 ~]# docker push reg.westos.org/busybox:latest[rootserver1 ~]# curl -k https://reg.westos.org/v2/_catalog -u admin:westos{repositories:[busybox,nginx]}登出[rootserver1 ~]# docker logoutreg.westos.orgserver2上移除非安全仓库设置[rootserver2 docker]# mv daemon.json /mnt/[rootserver2 docker]# systemctl restart docker添加解析[rootserver2 ~]# vim /etc/hosts...192.168.56.11 替换为自己的ipserver1 reg.westos.org拷贝证书[rootserver1 ~]# cd /etc/docker/[rootserver1 ~]# scp -r certs.d/ server2:/etc/docker/登录远程仓库[rootserver2 docker]# docker login reg.westos.orgUsername: wxhPassword:WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seedocker login | Docker DocsLogin Succeeded拉取镜像[rootserver2 docker]# docker pull reg.westos.org/busyboxUsing default tag: latestlatest: Pulling from busybox205dae5015e7: Pull completeDigest: sha256:907ca53d7e2947e849b839b1cd258c98fd3916c60f2e6e70c30edbf741ab6754Status: Downloaded newer image for reg.westos.org/busybox:latestreg.westos.org/busybox:latest