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