当前位置: 首页> 游戏> 手游 > docker实战演练

docker实战演练

时间:2025/7/13 21:37:54来源:https://blog.csdn.net/ANCHG_/article/details/141615397 浏览次数:0次

一.docker简介

二.docker部署

1.解压并安装所需要的软件

[root@docker-node1 ~]# ls
anaconda-ks.cfg        docker.tar.gz    mario.tar.gz
busybox-latest.tar.gz  game2048.tar.gz  nginx-latest.tar.gz
[root@docker-node1 ~]# tar zxf docker.tar.gz 
[root@docker-node1 ~]# ls
anaconda-ks.cfg
busybox-latest.tar.gz
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
docker.tar.gz
game2048.tar.gz
mario.tar.gz
nginx-latest.tar.gz
[root@docker-node1 ~]# yum install *.rpm -y

2.启动服务并从归档文件中加载镜像

[root@docker-node1 ~]# systemctl enable --now docker
[root@docker-node1 ~]# docker load -i game2048.tar.gz 
[root@docker-node1 ~]# docker load -i mario.tar.gz 
[root@docker-node1 ~]# docker load -i nginx-latest.tar.gz 
[root@docker-node1 ~]# docker load -i busybox-latest.tar.gz 

3.测试:

[root@docker-node1 ~]# docker run -d --rm --name game1 -p 80:80 timinglee/game2048:latest 

[root@docker-node1 ~]# docker rm -f game1 
[root@docker-node1 ~]# docker run -d --rm --name game2 -p 80:8080 timinglee/mario:latest 

三.docker的基本操作

<1>.docker镜像管理

1.搜索镜像

[root@Docker-node1 ~]# docker search nginx

2.拉取镜像

alpine 版本: nginx 镜像的最小安装发型版本
[root@docker-node1 ~]# docker pull nginx:1.26-alpine

3.查看镜像信息

[root@Docker-node1 ~]# docker image inspect nginx:1.26-alpine

4.导出镜像

-o :指定导出镜像的位置; 可以同时导出多个镜像到一个文件中; 指定 .tar.gz 可以导出并压缩。
[root@docker-node1 ~]# docker image save -o nginx-1.26-alpine.tar.gz nginx:1.26-alpine 
[root@Docker-node1 ~]# docker save `docker images | awk 'NR>1{print $1":"$2}'` -o images.tar.gz

5.导入镜像

[root@docker-node1 ~]# docker load -i busybox-latest.tar.gz 

6.删除镜像

[root@Docker-node1 ~]# docker rmi nginx:latest
[root@Docker-node1 ~]# docker rmi `docker images | awk 'NR>1{print $1":"$2}'`

<2>.容器的常用操作

-d
后台运行
-i
交互式运行
-t
打开一个终端
--name
指定容器名称
-p
端口映射 -p 80:8080 把容器8080端口映射到本机80端口
--rm
容器停止自动删除容器
--network
指定容器使用的网络

1.启动容器

[root@Docker-node1 ~]# docker run -d --name mario -p 80:8080 timinglee/mario
[root@docker-node1 ~]# docker run -d --rm --name web1 nginx
进入到容器中,按<ctrl>+<d>退出并停止容器,按<ctrl>+<pq>退出但不停止容器
[root@docker-node1 ~]# docker run -it --name test busybox
[root@docker-node1 ~]# docker attach test           #重新进入容器
[root@docker ~]# docker exec -it test ifconfig      #在容器中执行命令 

2.查看容器运行信息

[root@Docker-node1 ~]# docker ps              #查看当前运行容器
[root@Docker-node1 ~]# docker ps -a           #查看所有容器
[root@Docker-node1 ~]# docker inspect busybox #查看容器运行的详细信息

3.停止和运行容器

容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!
[root@Docker-node1 ~]# docker stop busybox     #停止容器
[root@Docker-node1 ~]# docker kill busybox     #杀死容器,可以使用信号
[root@Docker-node1 ~]# docker start busybox    #开启停止的容器

4.删除容器

[root@Docker-node1 ~]# docker rm test            #删除停止的容器
[root@Docker-node1 ~]# docker rm -f test         #删除运行的容器
[root@Docker-node1 ~]# docker container prune -f #删除所有停止的容器

5.容器内容提交

       默认情况下,容器被删除后,在容器中的所有操作都会被清理,包括要保存的文件,如果想永久保存,那么我们需要把动作提交,提交后会生成新的镜像,当我们在运行新镜像后即可看到我们提交的内容。此方法不利于企业审计,所以不推荐使用,在企业中我们多用 Dockerfile 来构建镜像。
[root@docker-node1 ~]# docker run -it --name test busybox
/ # touch liufile
/ # ls
bin      etc      lib      liufile  root     tmp      var
dev      home     lib64    proc     sys      usr[root@docker-node1 ~]# docker commit -m "add liufile" test busybox:v1

测试:删除旧镜像,加载新镜像

6.系统中的文件和容器中的文件传输

[root@docker-node1 ~]# docker cp test:/liufile /mnt        #把容器中的文件复制到本机
[root@Docker-node1 ~]# docker cp /etc/fstab test:/fstab    #把本机文件复制到容器中

7.查询容器内部日志

[root@Docker-node1 ~]# docker logs test

四.docker镜像构建

1.共享宿主机的kernel, base 镜像提供的是最小的 Linux 发行版, 同一 docker 主机支持运行多种 Linux 发行版, 采用分层结构的最大好处是:共享资源。
2. Copy-on-Write 可写容器层, 容器层以下所有镜像层都是只读的, docker 从上往下依次查找文件, 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改, 一个镜像最多 127 层。
3.镜像构建参数
FROM
指定 base 镜像
FROM busybox:version
COPY
复制文件
COPY file /file 或者 COPY [“file”,”/”]
MAINTAINER
指定作者信息
MAINTAINER user@example.com
ADD
功能和copy相似,指定压缩文件或url
ADD test.tar /mnt 或者ADDhttp://ip/test.tar /mnt
ENV
指定环境变量
ENV FILENAME test
EXPOSE
暴漏容器端口
EXPOSE 80
VOLUME
申明数据卷,通常指数据挂载点
VOLUME [“/var/www/html”]
WORKDIR
切换路径
WORKDIR /mnt
RUN
在容器中运行的指令
touch file
CMD
在启动容器时自动运行动作可以被覆盖
CMD echo $FILENAME 会调用
shell 解析 CMD [“/bin/sh”,”-c”,“echo $FILENAME”] 不调用 shell 解析
ENTRYPOINT
CMD 功能和用法类似,但动作不可被覆盖

<1>.建立构建目录,编写构建文件

[root@docker-node1 ~]# docker load -i centos-7.tar.gz 
[root@docker-node1 ~]# mkdir docker
[root@docker-node1 ~]# cd docker/
[root@docker-node1 docker]# mv /root/nginx-1.26-alpine.tar.gz .
[root@docker-node1 docker]# vim DockerfileFROM centos:7
LABEL Mail=liu@rhel9.org
ADD nginx-1.26-alpine.tar.gz /mnt
WORKDIR nginx-1.26-alpine.tar.gz
RUN yum install -y gcc make pcre-devel openssl-devel
RUN ./configure --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
EXPOSE 80 443
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

<2>.通过dockerfile生成镜像

[root@docker-node1 docker]# docker build -t nginx:v1 .

<3>.测试镜像可用性

[root@docker-node1 docker]# docker images nginx
REPOSITORY   TAG           IMAGE ID       CREATED       SIZE
nginx        1.26-alpine   9703b2608a98   2 weeks ago   43.3MB
nginx        v1            5ef79149e0ec   2 weeks ago   494MB

<4>.镜像优化方案

1.缩减镜像层

[root@server1 docker]# vim DockerfileFROM centos:repo as build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module -- with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-1.23.3 && yum clean all
EXPOSE 80 443
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

2.多阶段构建

[root@server1 docker]# vim DockerfileFROM centos:repo as build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS
-g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --
with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-
1.23.3 && yum clean allFROM centos:repo
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80 443
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

3.使用最精简镜像

[root@server1 new]# vim DockerfileFROM nginx:latest as base
ARG TIME_ZONE
RUN mkdir -p /opt/var/cache/nginx && \cp -a --parents /usr/lib/nginx /opt && \cp -a --parents /usr/share/nginx /opt && \cp -a --parents /var/log/nginx /opt && \cp -aL --parents /var/run /opt && \cp -a --parents /etc/nginx /opt && \cp -a --parents /etc/passwd /opt && \cp -a --parents /etc/group /opt && \cp -a --parents /usr/sbin/nginx /opt && \cp -a --parents /usr/sbin/nginx-debug /opt && \cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libpcre* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
FROM gcr.io/distroless/base-debian11
COPY --from=base /opt /
EXPOSE 80 443
ENTRYPOINT ["nginx", "-g", "daemon off;"]

五.docker仓库构建

       Docker仓库(Docker Registry) 是用于存储和分发 Docker 镜像的集中式存储库。 它就像是一个大型的镜像仓库,开发者可以将自己创建的 Docker 镜像推送到仓库中,也可以从仓库中拉 取所需的镜像。 Docker 仓库可以分为公共仓库和私有仓库: 公共仓库,如 Docker Hub ,任何人都可以访问和使用其中的镜像。许多常用的软件和应用都有在 Docker Hub 上提供的镜像,方便用户直接获取和使用。 例如,想要部署一个 Nginx 服务器,就可以从 Docker Hub 上拉取 Nginx 的镜像。 私有仓库则是由组织或个人自己搭建和管理的,用于存储内部使用的、不希望公开的镜像。 比如,一家企业为其特定的业务应用创建了定制化的镜像,并将其存储在自己的私有仓库中, 以保证安全性和控制访问权限。 通过 Docker 仓库,开发者能够方便地共享和复用镜像,加速应用的开发和部署过程。

<1>.搭建简单的registry仓库

1.导入Registry镜像
[root@docker-node1 ~]# docker load -i registry.tag.gz
2.开启Registry
[root@docker-node1 ~]# docker run -d -p 5000:5000 --restart=always --name registry registry
3.给要上传的镜像打标签,上传镜像到仓库中
[root@docker-node1 ~]# docker tag busybox:latest 172.25.254.100:5000/busybox:latest
[root@docker-node1 ~]# docker push 172.25.254.100:5000/busybox:latest 
4.配置非加密端口
[root@docker-node1 ~]# vim /etc/docker/daemon.json {
"insecure-registries" : ["http://172.25.254.100:5000"]
}[root@docker-node1 ~]# systemctl restart docker

5.上传镜像并查看

[root@docker-node1 ~]# docker push 172.25.254.100:5000/busybox:latest 
[root@docker-node1 ~]# curl 172.25.254.100:5000/v2/_catalog
{"repositories":["busybox"]}

6.Registry提加密传输

(1).为Registry提加密传输,生成认证key和证书

[root@docker-node1 ~]# mkdir certs
[root@docker-node1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/rhel9.org.key -addext "subjectAltName = DNS:www.rhel9.org" -x509 -days 365 -out certs/rhel9.org.crt
(2).启动 registry 仓库
[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always --name registry --name registry1 -v /opt/registry:/var/lib/registry  -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/rhel9.org.crt  -e REGISTRY_HTTP_TLS_KEY=/certs/rhel9.org.key registry

(3). 为客户端建立证书
[root@docker-node1 ~]# mkdir -p /etc/docker/certs.d/www.rhel9.org
[root@docker-node1 ~]# cp /root/certs/rhel9.org.crt /etc/docker/certs.d/www.rhel9.org/ca.crt
[root@docker-node1 ~]# systemctl restart docker

(4).测试:上传镜像

[root@docker-node1 ~]# docker push www.rhel9.org/busybox:latest
[root@docker-node1 ~]# curl -k https://www.rhel9.org/v2/_catalog
{"repositories":["busybox"]}
7.为仓库建立登陆认证
(1). 安装建立认证文件的工具包
[root@docker-node1 ~]# dnf install httpd-tools -y
(2).建立认证文件
[root@docker-node1 ~]# mkdir auth
[root@docker-node1 ~]# htpasswd -Bc auth/htpasswd rhel9   #-B 强制使用最安全加密方式,默认用md5加密
New password: 
Re-type new password: 
Adding password for user rhel9
(3).添加认证到registry容器中
[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always --name registry --name registry -v /opt/registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/rhel9.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/rhel9.org.key -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd"  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
[root@docker-node1 ~]# curl -k https://www.rhel9.org/v2/_catalog -u rhel9:123456
{"repositories":["busybox"]}

(4).登陆测试

当仓库开启认证后必须登陆仓库才能进行镜像上传

<2>.搭建企业级私有仓库

1.部署harbor

[root@docker-node1 ~]# tar zxf harbor-offline-installer-v2.5.4.tgz
[root@docker-node1 ~]# cd harbor/
[root@docker-node1 harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker-node1 harbor]# vim harbor.ymlhostname: www.rhel9.org
certificate: /data/certs/timinglee.org.crt
private_key: /data/certs/timinglee.org.key
harbor_admin_password: 123456[root@docker-node1 harbor]# cp /root/certs/ /data/ -r
[root@docker-node1 harbor]# ./install.sh --with-chartmuseum

2.管理仓库

[root@docker-node1 harbor]# docker compose stop      #停止服务
[root@docker-node1 harbor]# docker compose up -d     #启动并后台运行

(1).登录

用户名:admin

2.建立仓库项目

3.上传镜像

 

六.docker网络

十.容器编排工具

关键字:docker实战演练

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: