Docker 从入门到实战:容器、镜像构建与私有仓库部署全指南

发布时间:2026/9/1 20:03:30
Docker 从入门到实战:容器、镜像构建与私有仓库部署全指南 docker容器初始配置vim /etc/hostscd /etc/yum.repos.dwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-cesystemctl enable --now dockerdocker infoyum install -y bridage-utilsecho net.bridge.bridge-nf-call-iptables 1 /etc/sysctl.d/docker.confecho net.bridge.bridge-nf-call-ip6tables 1 /etc/sysctl.d/docker.confecho net.ipv4.ip_forward 1 /etc/sysctl.d/docker.confsysctl --systemsystemctl restart dockerdocker info拉取镜像docker search docker.1ms.run/yakexi007docker pull docker.1ms.run/yakexi007/game2048docker imagesdocker tag docker.1ms.run/yakexi007/game2048:latest game2048:latestdocker rmi docker.1ms.run/yakexi007/game2048docker history game2048:latestdocker run -d --name demo -p 80:80 game2048docker psdocker基础命令docker search docker.1ms.run/busyboxdocker pull docker.1ms.run/busyboxdocker pull docker.1ms.run/nginxdocker imagesdocker tag docker.1ms.run/busybox:latest busybox:latestdocker tag docker.1ms.run/nginx:latest nginx:latestdocker rmi docker.1ms.run/nginxdocker rmi docker.1ms.run/busyboxdocker run -it busyboxlstouch file1exit 注意快捷键ctrlpq将docker退到后台docker ps -adocker rm (-f)docker run -it (-it交互式-d打入后台--name test busyboxexitdocker start testdockers logs testdocker exec -it test bash注意此时直接进入容器cat busybox.confdocker attach testdocker rm test针对模块Tab键补齐容器docker container镜像image数据卷volume网络networkswarm集群swarmsearch pull pushdocker镜像[rootdocker1 ~]# docker history nginx:latest清理环境[rootdocker1 ~]# docker rm -f docker ps -qa[rootdocker1 ~]# docker ps -a[rootdocker1 ~]# docker run -it --name demo busybox/ # touch file1 file2 file3容器放到后台[rootdocker1 ~]# docker ps -aos.sql拷贝[rootdocker1 ~]# docker cp os.sql demo:/[rootdocker1 ~]# docker attach demo/ # ls容器直接退出[rootdocker1 ~]# docker ps把当前容器的运行状态保存成一个新本地镜像容器不管是运行还是停止状态都可以 commit[rootdocker1 ~]# docker commit -m add os.sql demo demo:v1[rootdocker1 ~]# docker images demo:v1分层结构[rootdocker1 ~]# docker history demo:v1[rootdocker1 ~]# docker history busybox:latestDockerfile 构建镜像[rootdocker1 ~]# mkdir docker/[rootdocker1 ~]# cp os.sql docker/[rootdocker1 ~]# cd docker/[rootdocker1 docker]# vim DockerfileFROM busyboxRUN touch file1 file2 file3COPY os.sql /[rootdocker1 docker]# docker build -t demo:v2 .[rootdocker1 docker]# docker images[rootdocker1 docker]# docker history demo:v2传递参数CMD参数覆盖可以进去查看信息[rootdocker1 docker]# docker history nginx[rootdocker1 docker]# docker run -it --name test nginx bashroot64c93244b8bb:/# lsexec格式[rootdocker1 docker]# vim DockerfileFROM busyboxENTRYPOINT [/bin/echo,hello]CMD [world][rootdocker1 docker]# docker build -t demo:v3 .[rootdocker1 docker]# docker run --rm demo:v3hlelo world[rootdocker1 docker]# docker run --rm demo:v3 linuxhello linuxshell格式底层调用/bin/sh -c执行命令解析变量[rootdocker1 docker]# vim DockerfileFROM busyboxENV name worldENTRYPOINT echo hello,$name[rootdocker1 docker]# docker build -t demo:v4 .[rootdocker1 docker]# docker run --rm demo:v4hello,world回收[rootdocker1 docker]# docker ps -a[rootdocker1 docker]# docker images demo[rootdocker1 docker]# docker rmi e6b92cb00cda 3c72bce2f7ba 38becec41bfa 7d5af8c224ee应用容器化[rootdocker1 docker]# wget https://nginx.org/download/nginx-1.30.4.tar.gz[rootdocker1 docker]# lsnginx-1.30.0.tar.gz[rootdocker1 docker]# docker pull docker.1ms.run/centos:7 慢速找代理或者centos7.tar[rootdocker1 docker]# docker load -i centos7.tar[rootdocker1 docker]# docker images[rootdocker1 docker]# rm -f centos7.tar拷贝源[rootdocker1 docker]# cp //etc/yum.repos.d/CentOS-Base.repo ~/docker/编写Dockfile[rootdocker1 docker]# docker history nginx:latest 仿照官方流程[rootdocker1 docker]# vim DockerfileFROM centos:7RUN rm -f /etc/yum.repos.d/*.repoCOPY CentOS-Base.repo /etc/yum.repos.d/RUN yum install -y gcc make pcre-devel openssl-develADD nginx-1.30.4.tar.gz /mnt/ #ADD具有压缩功能WORKDIR /mnt/nginx-1.30.4RUN sed -i s/CFLAGS$CFLAGS -g/#CFLAGS$CFLAGS -g/g auto/cc/gccRUN ./configure --with-http_ssl_module --with-http_stub_status_moduleRUN makeRUN make installEXPOSE 80CMD [/usr/local/nginx/sbin/nginx, -g, daemon off;][rootdocker1 docker]# docker build -t webserver:v1 . 重复构建存在缓存[rootdocker1 docker]# docker run -d --name web1 webserver:v1[rootdocker1 docker]# docker ps -a[rootdocker1 docker]# docker inspect web1[rootdocker1 docker]# curl 172.17.0.2web1日志查看[rootdocker1 docker]# docker exec -it web1 bash[root3bbb0f737dc6 nginx-1.30.4]# cd /usr/local/nginx/logs[root3bbb0f737dc6 logs]# lsaccess.log error.log nginx.pid[root3bbb0f737dc6 logs]# exit镜像优化[rootdocker1 docker]# docker cp web1:/usr/local/nginx/conf/nginx.conf /root/docker/[rootdocker1 docker]# vim nginx.conferror_log /dev/stderr notice;log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /dev/stdout main;重新构建webserver2镜像使配置生效解决日志问题缩小层数[rootdocker1 docker]# vim DockerfileCentOS-Base.repo源可以只保留第一个FROM centos:7RUN rm -f /etc/yum.repos.d/*.repoCOPY CentOS-Base.repo /etc/yum.repos.d/ADD nginx-1.30.4.tar.gz /mnt/RUN yum install -y gcc make pcre-devel openssl-devel cd /mnt/nginx-1.30.4 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.30.4 yum clean allCOPY nginx.conf /usr/local/nginx/conf/EXPOSE 80CMD [/usr/local/nginx/sbin/nginx, -g, daemon off;][rootdocker1 docker]# docker images[rootdocker1 docker]# docker run -d --name web1 webserver:v2[rootdocker1 docker]# docker logs web1[rootdocker1 docker]# curl 172.17.0.2[rootdocker1 docker]# docker logs web1回收[rootdocker1 docker]# docker rm -f web1多阶段构建优化[rootdocker1 docker]# vim DockerfileFROM centos:7 as buildRUN rm -f /etc/yum.repos.d/*.repoCOPY CentOS-Base.repo /etc/yum.repos.d/ADD nginx-1.30.4.tar.gz /mnt/RUN yum install -y gcc make pcre-devel openssl-devel cd /mnt/nginx-1.30.4 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.30.4 yum clean allCOPY nginx.conf /usr/local/nginx/conf/FROE centos:7COPY --frombuild /usr/local/nginx /usr/local/nginxEXPOSE 80CMD [/usr/local/nginx/sbin/nginx, -g, daemon off;][rootdocker1 docker]# docker build -t webserver:v3 .[rootdocker1 docker]# docker images[rootdocker1 docker]# docker run -d --name web1 webserver:v3二进制动态库[rootdocker1 docker]# docker exec -it web1 bash[root2eb73e6cb2ae /]# ldd /usr/local/nginx/sbin/nginx[root2eb73e6cb2ae /]# cd /[root2eb73e6cb2ae /]# lllrwxrwxrwx 1 root root 9 Nov 13 2020 lib64 - usr/lib64精简镜像base-debian12[rootdocker1 docker]# cd[rootdocker1 ~]# lsanaconda-ks.cfg base-debian12.tar docker os.sql[rootdocker1 ~]# docker load -i base-debian12.tar[rootdocker1 ~]# cd docker[rootdocker1 docker]# mkdir new[rootdocker1 docker]# cd new[rootdocker1 docker]# docker pull docker.1ms.run/nginx 复制官方FROM nginx:latest as baseRUN 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 /lib/x86_64-linux-gnu/libzstd* /opt \cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt \cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /optFROMgcr.io/distroless/base-debian12:latestCOPY --frombase /optEXPOSE 80 443ENTRYPOINT [nginx, -g, daemon off;][rootdocker1 new]# docker build -t webserver:v4[rootdocker1 new]# docker images webserver[rootdocker1 new]# docker run -d --name web1 webserver:v4回收容器[rootdocker1 new]# docker rm -f $(docker ps -aq)Docker仓库registry私有仓库[rootdocker1 new]# docker pull docker.1ms.run/registry[rootdocker1 new]#docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry[rootdocker1 new]#docker ps -l配置仓库自启动[rootdocker1 new]#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[rootdocker1 new]#systemctl daemon-reload[rootdocker1 new]#docker stop registry[rootdocker1 new]#systemctl enable --now registry[rootdocker1 new]#docker ps -l[rootdocker1 new]#docker tag busybox:latest localhost:5000/busybox:latest[rootdocker1 new]#docker push localhost:5000/busybox[rootdocker1 new]#curl http://localhost:5000/v2/_catalog {repositories:[busybox]}[rootdocker1 new]#curl http://localhost:5000/v2/busybox/tags/list {name:busybox,tags:[latest]}[rootdocker1 new]#docker pull localhost:5000/busybox