docker-01 | 10.0.0.51 |
docker-02 | 10.0.0.52 |
docker-03 | 10.0.0.53 |
【1】docker安装
docker-01
[root@docker-01 ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
[root@docker-01 ~]# wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@docker-01 ~]# sed -i 's+donload.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[root@docker-01 ~]# yum -y install docker-ce
## 安装包的存放路径
[root@docker-01 ~]# mkdir docker-ce
[root@docker-01 ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs mv -t docker-ce/
[root@docker-01 ~]# docker version
Client: Docker Engine - Community
Version: 24.0.4
API version: 1.43
Go version: go1.20.5
Git commit: 3713ee1
Built: Fri Jul 7 14:54:21 2023
OS/Arch: linux/amd64
Context: default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@docker-01 ~]# systemctl start docker
[root@docker-01 ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@docker-01 ~]# tar -zcvf docker-ce.tar.gz docker-ce/
[root@docker-01 ~]# scp -rp docker-ce.tar.gz root@10.0.0.52:/root/
root@10.0.0.52's password:
docker-ce.tar.gz
docker-02、docker-03
[root@docker-02 ~]# tar xf docker-ce.tar.gz
[root@docker-02 ~]# cd docker-ce/
[root@docker-02 docker-ce]# yum localinstall -y *.rpm
[root@docker-02 docker-ce]# systemctl start docker
[root@docker-02 docker-ce]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@docker-02 docker-ce]# docker version
Client: Docker Engine - Community
Version: 24.0.4
API version: 1.43
Go version: go1.20.5
Git commit: 3713ee1
Built: Fri Jul 7 14:54:21 2023
OS/Arch: linux/amd64
Context: default
【2】volume-存储
容器数据本地目录位置
[root@docker-01 ~]# docker run -dit --name test-01 alpine:latest
5d65a22c730e215414da92c6c79836cf4dd1402bc4b56e701f38aac84e8ab2bb
[root@docker-01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d65a22c730e alpine:latest "/bin/sh" 8 seconds ago Up 7 seconds test-01
c6b42128a328 registry:latest "/entrypoint.sh /etc…" 16 minutes ago Up 11 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
[root@docker-01 ~]# docker exec -it test-01 /bin/sh
/ # touch test
/ # exit
[root@docker-01 ~]# cd /var/lib/docker/
[root@docker-01 docker]# find ./ -type f -name "test"
./overlay2/84bae6ec2e284fa10c371fcb97e993c1f1b6d342344e8a6c839c6b0e5157d383/diff/test
./overlay2/84bae6ec2e284fa10c371fcb97e993c1f1b6d342344e8a6c839c6b0e5157d383/merged/test
将本地目录挂载到容器中
[root@docker-01 ~]# mkdir test
[root@docker-01 ~]# docker run -dit --name test-01 -v ./test:/opt/test/ alpine:latest
fd79df1b5127cfcd0902c4193317a8191c79f2a87a1197400ae3005ce63d7495
[root@docker-01 ~]# echo "111" > test/file
[root@docker-01 ~]# docker exec -it test-01 cat opt/test/file
111
使用volume卷做数据持久化
- 即使容器被删除, volume卷还会存在,一直保存,除非把卷删除
- volume会将容器目录内容保存到本地,前提是卷是空内容,如果卷中有数据,他会将容器目录覆盖
- volume也可以数据共享,支持多个容器可以挂载相同的卷
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
[root@docker-01 ~]# docker volume create test
test
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
local test
[root@docker-01 ~]# docker run -dit --name test-01 -v test:/opt alpine:latest
1e53144cdc60a7b26f673bd9191ce9c84fac5ff3ea22c7cc938884cb7463d3fb
[root@docker-01 ~]# cd /var/lib/docker/volumes/test/_data/
[root@docker-01 _data]# mkdir ff
[root@docker-01 _data]# docker exec -it test-01 ls opt/
ff
【3】 制作镜像
dockerfile-自动制作镜像
FROM # 使用的基础容器
RUN # 下载服务
CMD # 容器启动的基础命令,容易被替换
ENTPRYOINT # 容器启动的基础命令,不能被替换,如果和CMD同时使用,CMD会成为他的参数
ADD # 拷贝,自动解压
COPY # 拷贝,不解压
WORKDIR # 指定默认的工作目录
EXPOSE # 暴露的端口
VOLUME # 持久化卷
ENV # 环境变量(ssh密码。数据库密码)
LABEL # 镜像的tags
MAINTAINER # 管理者标识
构建单服务镜像-nginx
[root@docker-01 nginx]# vim dockerfile
FROM alpine:latest
RUN apk add nginx
RUN mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf_bak
COPY test.conf /etc/nginx/http.d
RUN mkdir /usr/share/nginx/html
RUN echo "TSET" >> /usr/share/nginx/html/index.html
WORKDIR /root
EXPOSE 80
VOLUME /var/log/nginx
CMD ["nginx","-g","daemon off;"]
[root@docker-01 nginx]# docker build -t nginx:v1 ./
[+] Building 1.0s (12/12) FINISHED docker:default
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 345B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 0.0s
=> [1/7] FROM docker.io/library/alpine:latest 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 31B 0.0s
=> CACHED [2/7] RUN apk add nginx 0.0s
=> CACHED [3/7] RUN mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf_bak 0.0s
=> CACHED [4/7] COPY test.conf /etc/nginx/http.d 0.0s
=> CACHED [5/7] RUN mkdir /usr/share/nginx/html 0.0s
=> CACHED [6/7] RUN echo "TSET" >> /usr/share/nginx/html/index.html 0.0s
=> [7/7] WORKDIR /root 0.0s
=> exporting to image 1.0s
=> => exporting layers 1.0s
=> => writing image sha256:5245200f87f20a09cc398ccb99149915d04c148942fe8367fe41ff3dcba8c321 0.0s
=> => naming to docker.io/library/nginx:v1
[root@docker-01 nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 5245200f87f2 32 seconds ago 10.7MB
[root@docker-01 nginx]# docker run -dit -p 80:80 --name nginx nginx:v1
079dbb6b8ae89070c42da5526be09430ec68b956b00173562953a07dee0ed820
[root@docker-01 nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
079dbb6b8ae8 nginx:v1 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@docker-01 nginx]# docker volume ls
DRIVER VOLUME NAME
local 2e2c3c34b376dc4b59b0415d68a1478aee43d0c8c86f05ffab621cf6b4694ba0
[root@docker-01 nginx]# ls /var/lib/docker/volumes/2e2c3c34b376dc4b59b0415d68a1478aee43d0c8c86f05ffab621cf6b4694ba0/_data/
access.log error.log
制作基础镜像centos:7
[root@docker-01 centos7]# vim dockerfile
FROM scratch
ADD centos_rootfs.tar.xz /
CMD ["/bin/sh"]
[root@docker-01 centos7]# docker build -t centos:7 ./
[+] Building 16.6s (5/5) FINISHED docker:default
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 93B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.7s
=> => transferring context: 73.57MB 0.7s
=> [1/1] ADD centos_rootfs.tar.xz / 14.0s
=> exporting to image 1.9s
=> => exporting layers 1.9s
=> => writing image sha256:88149b5f20e7ac45d64059685021e08274c2459404a0fe815aa3aea66885fe89 0.0s
=> => naming to docker.io/library/centos:7 0.0s
[root@docker-01 centos7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 88149b5f20e7 10 seconds ago 402MB
查看镜像的构建历史
[root@docker-01 centos7]# docker history centos:7
IMAGE CREATED CREATED BY SIZE COMMENT
88149b5f20e7 About a minute ago CMD ["/bin/sh"] 0B buildkit.dockerfile.v0
<missing> About a minute ago ADD centos_rootfs.tar.xz / # buildkit 402MB buildkit.dockerfile.v0
制作nginx+ssh的镜像
[root@docker-01 nginx-ssh]# vim dockerfile
FROM centos7:v1
RUN yum -y install epel-release
RUN yum clean all
RUN yum -y install nginx
RUN yum -y install openssh-server
RUN yum -y install initscripts
RUN /usr/sbin/sshd-keygen
RUN /usr/sbin/sshd
RUN echo '111' | passwd --stdin root
ADD init.sh /init.sh
EXPOSE 80 22
WORKDIR /root
CMD ["/bin/bash","/init.sh"]
[root@docker-01 nginx-ssh]# vim init.sh
#!/bin/bash
nginx
/usr/sbin/sshd -D
## 构建
[root@docker-01 nginx-ssh]# docker build -t nginx_ssh:v1 ./
[+] Building 40.6s (16/16) FINISHED docker:default
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 354B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos7:v1 0.0s
=> CACHED [ 1/11] FROM docker.io/library/centos7:v1 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 28B 0.0s
=> [ 2/11] RUN yum -y install epel-release 1.2s
=> [ 3/11] RUN yum clean all 0.3s
=> [ 4/11] RUN yum -y install nginx 24.3s
=> [ 5/11] RUN yum -y install openssh-server 4.3s
=> [ 6/11] RUN yum -y install initscripts 4.3s
=> [ 7/11] RUN /usr/sbin/sshd-keygen 0.2s
=> [ 8/11] RUN /usr/sbin/sshd 0.1s
=> [ 9/11] RUN echo '111' | passwd --stdin root 0.1s
=> [10/11] ADD init.sh /init.sh 0.0s
=> [11/11] WORKDIR /root 0.0s
=> exporting to image 5.7s
=> => exporting layers 5.7s
=> => writing image sha256:c002c1a89ce1980238236701efa0f496f25c8f925603fbfa666a4b1beee41228 0.0s
=> => naming to docker.io/library/nginx_ssh:v1
[root@docker-01 nginx-ssh]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_ssh v1 c002c1a89ce1 55 seconds ago 1.09GB
## 启动容器测试验证
[root@docker-01 nginx-ssh]# docker run -dit -P nginx_ssh:v1
72eb999e39d4227419934fa2adbd3bb8b3be874f01350647015db149aad2d41e
[root@docker-01 nginx-ssh]#