☰
Docker 从入门到实战:容器、镜像构建与私有仓库部署全指南
2026/10/24 19:22:04 网站建设 项目流程

docker容器

初始配置

vim /etc/hosts

cd /etc/yum.repos.d

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

systemctl enable --now docker

docker info

yum install -y bridage-utils

echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/docker.conf

echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.d/docker.conf

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/docker.conf

sysctl --system

systemctl restart docker

docker info

拉取镜像

docker search docker.1ms.run/yakexi007

docker pull docker.1ms.run/yakexi007/game2048

docker images

docker tag docker.1ms.run/yakexi007/game2048:latest game2048:latest

docker rmi docker.1ms.run/yakexi007/game2048

docker history game2048:latest

docker run -d --name demo -p 80:80 game2048

docker ps

docker基础命令

docker search docker.1ms.run/busybox

docker pull docker.1ms.run/busybox

docker pull docker.1ms.run/nginx

docker images

docker tag docker.1ms.run/busybox:latest busybox:latest

docker tag docker.1ms.run/nginx:latest nginx:latest

docker rmi docker.1ms.run/nginx

docker rmi docker.1ms.run/busybox

docker run -it busybox

ls

touch file1

exit 注意快捷键ctrl+p+q将docker退到后台

docker ps -a

docker rm (-f)

docker run -it (-it交互式,-d打入后台)--name test busybox

exit

docker start test

dockers logs test

docker exec -it test bash注意此时直接进入容器,cat busybox.conf

docker attach test

docker rm test

针对模块,Tab键补齐

容器docker container

镜像image

数据卷volume

网络network

swarm集群swarm

search pull push

docker镜像

[root@docker1 ~]# docker history nginx:latest

清理环境

[root@docker1 ~]# docker rm -f `docker ps -qa`

[root@docker1 ~]# docker ps -a

[root@docker1 ~]# docker run -it --name demo busybox

/ # touch file1 file2 file3

容器放到后台[root@docker1 ~]# docker ps -a

os.sql拷贝

[root@docker1 ~]# docker cp os.sql demo:/

[root@docker1 ~]# docker attach demo
/ # ls

容器直接退出[root@docker1 ~]# docker ps

把当前容器的运行状态,保存成一个新本地镜像,容器不管是运行还是停止状态都可以 commit

[root@docker1 ~]# docker commit -m "add os.sql" demo demo:v1

[root@docker1 ~]# docker images demo:v1

分层结构

[root@docker1 ~]# docker history demo:v1

[root@docker1 ~]# docker history busybox:latest

Dockerfile 构建镜像

[root@docker1 ~]# mkdir docker/

[root@docker1 ~]# cp os.sql docker/

[root@docker1 ~]# cd docker/

[root@docker1 docker]# vim Dockerfile

FROM busybox
RUN touch file1 file2 file3
COPY os.sql /

[root@docker1 docker]# docker build -t demo:v2 .

[root@docker1 docker]# docker images

[root@docker1 docker]# docker history demo:v2

传递参数

CMD参数覆盖,可以进去查看信息

[root@docker1 docker]# docker history nginx

[root@docker1 docker]# docker run -it --name test nginx bash
root@64c93244b8bb:/# ls

exec格式

[root@docker1 docker]# vim Dockerfile

FROM busybox
ENTRYPOINT ["/bin/echo","hello"]
CMD ["world"]

[root@docker1 docker]# docker build -t demo:v3 .

[root@docker1 docker]# docker run --rm demo:v3
hlelo world

[root@docker1 docker]# docker run --rm demo:v3 linux
hello linux

shell格式

底层调用/bin/sh -c执行命令,解析变量

[root@docker1 docker]# vim Dockerfile

FROM busybox
ENV name world
ENTRYPOINT echo "hello,$name"

[root@docker1 docker]# docker build -t demo:v4 .

[root@docker1 docker]# docker run --rm demo:v4
hello,world

回收

[root@docker1 docker]# docker ps -a

[root@docker1 docker]# docker images demo

[root@docker1 docker]# docker rmi e6b92cb00cda 3c72bce2f7ba 38becec41bfa 7d5af8c224ee

应用容器化

[root@docker1 docker]# wget https://nginx.org/download/nginx-1.30.4.tar.gz

[root@docker1 docker]# ls
nginx-1.30.0.tar.gz

[root@docker1 docker]# docker pull docker.1ms.run/centos:7 慢速找代理

或者centos7.tar

[root@docker1 docker]# docker load -i centos7.tar

[root@docker1 docker]# docker images

[root@docker1 docker]# rm -f centos7.tar

拷贝源

[root@docker1 docker]# cp //etc/yum.repos.d/CentOS-Base.repo ~/docker/

编写Dockfile

[root@docker1 docker]# docker history nginx:latest 仿照官方流程

[root@docker1 docker]# vim Dockerfile

FROM centos:7
RUN rm -f /etc/yum.repos.d/*.repo
COPY CentOS-Base.repo /etc/yum.repos.d/
RUN yum install -y gcc make pcre-devel openssl-devel
ADD nginx-1.30.4.tar.gz /mnt/ #ADD具有压缩功能
WORKDIR /mnt/nginx-1.30.4
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

[root@docker1 docker]# docker build -t webserver:v1 . 重复构建存在缓存

[root@docker1 docker]# docker run -d --name web1 webserver:v1

[root@docker1 docker]# docker ps -a

[root@docker1 docker]# docker inspect web1

[root@docker1 docker]# curl 172.17.0.2

web1日志查看

[root@docker1 docker]# docker exec -it web1 bash

[root@3bbb0f737dc6 nginx-1.30.4]# cd /usr/local/nginx/logs

[root@3bbb0f737dc6 logs]# ls
access.log error.log nginx.pid

[root@3bbb0f737dc6 logs]# exit

镜像优化

[root@docker1 docker]# docker cp web1:/usr/local/nginx/conf/nginx.conf /root/docker/

[root@docker1 docker]# vim nginx.conf

error_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镜像,使配置生效

解决日志问题,缩小层数

[root@docker1 docker]# vim Dockerfile

CentOS-Base.repo源可以只保留第一个

FROM centos:7
RUN rm -f /etc/yum.repos.d/*.repo
COPY 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 all
COPY nginx.conf /usr/local/nginx/conf/
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

[root@docker1 docker]# docker images

[root@docker1 docker]# docker run -d --name web1 webserver:v2

[root@docker1 docker]# docker logs web1

[root@docker1 docker]# curl 172.17.0.2

[root@docker1 docker]# docker logs web1

回收

[root@docker1 docker]# docker rm -f web1

多阶段构建优化

[root@docker1 docker]# vim Dockerfile

FROM centos:7 as build
RUN rm -f /etc/yum.repos.d/*.repo
COPY 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 all
COPY nginx.conf /usr/local/nginx/conf/

FROE centos:7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

[root@docker1 docker]# docker build -t webserver:v3 .

[root@docker1 docker]# docker images

[root@docker1 docker]# docker run -d --name web1 webserver:v3

二进制动态库

[root@docker1 docker]# docker exec -it web1 bash
[root@2eb73e6cb2ae /]# ldd /usr/local/nginx/sbin/nginx

[root@2eb73e6cb2ae /]# cd /
[root@2eb73e6cb2ae /]# ll

lrwxrwxrwx 1 root root 9 Nov 13 2020 lib64 -> usr/lib64

精简镜像

base-debian12

[root@docker1 docker]# cd
[root@docker1 ~]# ls
anaconda-ks.cfg base-debian12.tar docker os.sql

[root@docker1 ~]# docker load -i base-debian12.tar

[root@docker1 ~]# cd docker
[root@docker1 docker]# mkdir new

[root@docker1 docker]# cd new

[root@docker1 docker]# docker pull docker.1ms.run/nginx 复制官方

FROM nginx:latest as base

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 /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.* /opt

FROMgcr.io/distroless/base-debian12:latest

COPY --from=base /opt

EXPOSE 80 443

ENTRYPOINT ["nginx", "-g", "daemon off;"]

[root@docker1 new]# docker build -t webserver:v4

[root@docker1 new]# docker images webserver

[root@docker1 new]# docker run -d --name web1 webserver:v4

回收容器

[root@docker1 new]# docker rm -f $(docker ps -aq)

Docker仓库

registry私有仓库

[root@docker1 new]# docker pull docker.1ms.run/registry

[root@docker1 new]#docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry

[root@docker1 new]#docker ps -l

配置仓库自启动

[root@docker1 new]#vim /etc/systemd/system/registry.service

[Unit]

Description=Registry

Requires=docker.service

After=docker.service

[Service]

Type=simple

Restart=always

ExecStart=/usr/bin/docker start -a registry

ExecStop=/usr/bin/docker stop registry

[Install]

WantedBy=multi-user.target

[root@docker1 new]#systemctl daemon-reload

[root@docker1 new]#docker stop registry

[root@docker1 new]#systemctl enable --now registry

[root@docker1 new]#docker ps -l

[root@docker1 new]#docker tag busybox:latest localhost:5000/busybox:latest

[root@docker1 new]#docker push localhost:5000/busybox

[root@docker1 new]#curl http://localhost:5000/v2/_catalog {"repositories":["busybox"]}

[root@docker1 new]#curl http://localhost:5000/v2/busybox/tags/list {"name":"busybox","tags":["latest"]}

[root@docker1 new]#docker pull localhost:5000/busybox

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询