2023-05-09
linux
00
请注意,本文编写于 693 天前,最后修改于 651 天前,其中某些信息可能已经过时。

目录

docker
一、docker安装
1、下载源码包
2、安装
3、为docker注册server服务
4、启动docker
二、docker命令
三、B站大紧博主 docker命令
四、创建私有仓库
创建共有仓库
五、数据卷
六、数据卷volumes
七、端口映射使用
八、网络模式
九、network的使用

docker

一、docker安装

1、下载源码包
shell
#从网络上下载docker源码包,自己有的可以使用自己的 wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-18.09.0.tgz --no-check-certificate
2、安装
shell
tar xf docker-18.09.0.tgz cp docker/* /usr/bin/ #解压缩docker安装包 拷贝命令到/usr/bin下
3、为docker注册server服务
shell
vim /etc/systemd/system/docker.service #内容如下 [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd -g /opt/docker ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
4、启动docker
shell
systemctl start docker

二、docker命令

shell
docker images #统计本地镜像 docker ps #查看运行中的进程 docker rename oldname newname #更改已运行容器名 docker stop name/id #停止一个正在运行的容器 docker rm -f nginx_02 #删除运行中/运行过的容器nginx_02
shell
docker volume ls # 查看所有volume的情况 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx docker volume inspect juming-nginx # 通过-v 卷名:容器内的路径 # 查看一下这个卷 docker volume inspect juming-nginx [ { "CreatedAt": "2020-08-12T18:15:21+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data", "Name": "juming-nginx", "Options": null, "Scope": "local" } ] #路径为/var/lib/docker/volumes/juming-nginx/_dat

所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxxx/_data

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用的是具名挂载

shell
# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载! -v 容器内路径 # 匿名挂载 -v 卷名:容器内路径 # 具名挂载 -v /主机路径:容器内路径 # 指定路径挂载

拓展

shell
# 通过 -v 容器内容路径 ro rw 改变读写权限 ro readonly # 只读 rw readwrite # 可读可写 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx # ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内容无法操作

三、B站大紧博主 docker命令

shell
1、搜索镜像 docker search hello-world 2、下载镜像 docker pull hello-world 3、查看本地所有镜像 docker images 4、查看镜像历史 docker history hello-world 5、将hello-world:latest镜像备份为hello:V2.0 docker tag 旧镜像名:版本号 备份后镜像名:版本号 6、删除镜像 docker rmi hello:V2.0 7、清除未被使用的镜像 docker images prune 8、导出镜像 docker save -o /导出路径/镜像名:版本号 源镜像 例:docker save -o /root/hello:123.tar.gz hello-world:latest 9、导入镜像 docker load -i 本地镜像路径 例:docker load -i /root/hello\:123.tar.gz 或者 docker import 本地镜像路径 docker镜像名:版本号 例:docker import /root/hello\:123.tar.gz hello:1.1 10、查看所有容器 docker ps -a 11、查看所有容器的容器编号(ID号) docker ps -aq 查看所有正在运行的容器编号 docker ps -q 12、守护进程启动容器/后台启动容器 docker run -dit --name 容器名 镜像名:版本号 例:docker run -dit --name nginx_01 nginx:latest 13、启动容器 docker start 容器名/ID 例:docker start nginx_01 14、停止容器 docker stop 容器名/ID 例:docker stop nginx_01 15、重启容器 docker restart 容器名/ID 例:docker restart nginx_01 16、删除容器 docker rm -f 容器名/ID 例:docker rm -f nginx_01 17、批量删除正在运行的容器 docker rm -f $(docker ps -q) 批量删除未运行的容器 docker rm -f $(docker ps -a | grep Exited | awk '{print $1}') 批量删除所有容器 docker rm -f $(docker ps -aq) 18、创建容器并进入 docker run -it --name 容器名 镜像名:版本号 /bin/bash 例:docker run -it --name nginx_02 nginx:latest /bin/bash 19、进入正在运行的容器 docker exec -it 容器名/ID /bin/bash 例:docker exec -it nginx_02 /bin/bash 或 docker attach 容器名/ID 20、通过容器创建自定义镜像 -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。 docker commit -m '说明文字' -a "发布者信息" -p 容器名/ID 生成的镜像名:版本 例:docker commit -m 'hhh' nginx_02 nginx:V1.2.3 21、查看`镜像`全部信息 docker image inspect 镜像名 例:docker image inspect nginx:latest 22、查看`容器`全部信息 docker inspect 容器名/ID 例:docker inspect nginx_01 23、给镜像打标签 docker tag 源镜像名:版本号 标签后镜像名 例:docker tag nginx:latest 192.168.2.60:9999/nginx 24、上传镜像 docker push 带标签的镜像名 例:docker push 192.168.2.60:9999/nginx

四、创建私有仓库

1、下载镜像

shell
docker pull registry #首先拉取仓库镜像

2、配置私有仓库 /etc/docker/daemin.json

shell
"insecure-registries": ["192.168.2.60:3333"], #添加此段,“,”不可少,ip是本机IP地址 systemctl daemon-reload systemctl restart docker.service #registry使用的是5000端口与外部交流的,所以要映射容器内5000端口

3、创建容器启动镜像

shell
docker run -dit --name 容器名 -p 3333:5000 registry

4、镜像上传下载

shell
#打标签 docker tag nginx:latest 192.168.59.111:5000/nginx `私有容器的名字必须是IP:端口的格式` #上传 docker push 192.168.2.60:3333/nginx #获取registry的镜像仓库中的镜像信息 curl -XGET http://192.168.2.60:3333/v2/_catalog #下载 docker pull 192.168.2.60:3333/nginx

创建共有仓库

五、数据卷

1、数据卷的作用

python
可以将宿主机中的数据和容器中的数据共享

2、创建过程

  • 1、先创建要映射的目录
  • 2、创建容器,和宿主机目录文件进行映射
shell
docker run -dit --name nginx_01 -p 1234:80 -v /nginx/html:/usr/share/nginx/html nginx:latest

六、数据卷volumes

1、数据卷增删改查

python
docker volume create 卷名 #创建数据卷 docker volume inspect 卷名 #查看数据卷详情信息 docker volume ls #查看所有数据卷 docker volume rm 卷名 #删除数据卷 docker volume prune #删除所有未使用的卷

2、补充命令

shell
[root@localhost ~]# docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 10 6 2.652GB 1.953GB (73%) Containers 6 6 6.922MB 0B (0%) Local Volumes 0 0 0B 0B
shell
#docker system prune #如果之前的命令展示出 docker 已经占用了太多空间,我们会开始清理。有一个包办一切的命令: [root@localhost ~]# docker system prune WARNING! This will remove: - all stopped containers # 清理停止的容器 - all networks not used by at least one container #清理没有使用的网络 - all dangling images #清理废弃的镜像 - all build cache #清理构建缓存 Are you sure you want to continue? [y/N] y Total reclaimed space: 0B
shell
清理none镜像(虚悬镜像) 命令: docker image prune 默认情况下,docker image prune 命令只会清理 虚无镜像(没被标记且没被其它任何镜像引用的镜像) root@instance-o70no2nw:~# docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B 清理无容器使用的镜像 命令: docker image prune -a

七、端口映射使用

创建docker容器的时候分配ip和端口

shell
docker run -dit --name nginx_03 -P nginx:latest #创建一个名为nginx_03的容器随机分配端口映射到nginx服务的默认端口 docker run -dit --name nginx_04 -p 2222:80 nginx:latest #创建一个名为nginx_04的容器,分配宿主机的2222端口映射到80端口 docker run -dit --name nginx_5 -p 172.11.11.22:3333:80 nginx:latest #指定IP和端口映射到镜像 -P(大写):随机分配端口 -p(小写):手动分配端口

八、网络模式

创建容器并指定使用哪一个网卡

shell
#创建容器指定和主机使用同一个网卡 docker run -dit --name nginx_01 --network=host nginx:latest
shell
#创建一个容器指定内部使用一个网卡,bridge网卡 docker run -dit --name nginx_02 --network=bridge nginxL:latest
python
bridge网卡:桥接模式,只要使用桥接模式创建的容器,网段都是一样的

九、network的使用

1、查看系统中的网络模式

shell
docker network ls #查看系统中的网络模式

2、创建新的网络模式

shell
docker network create XXX #创建网络网络模式 docker network create --driver bridge my_bridge #基于现有的网络模式创建

3、通过网络模式断开其中某个容器的网络

shell
docker network disconnect bridge nginx_01 #断开nginx_01的网络连接

4、通过网络模式连接其中断开连接的容器的网络

shell
docker network connect bridge nginx_01 #连接上nginx_01容器的网络连接

5、删除网络模式

shell
docker network rm my_bridge #删除我创建的my_bridge网络

20230310更新

docker修改默认镜像和容器的存储位置

方法一、

Docker 默认的位置在/var/lib/docker,当前所有的镜像、容器都存储在这儿。如果你有任何在运行的容器,停止这些容器,并确保没有容器在运行,然后运行以下命令,确定当前Docker使用的存储驱动

sudo docker info 在输出的信息中,查找Storage Driver那行,并记下:

shell
Storage Driver: overlay2

docker存储根目录:

shell
Docker Root Dir: /var/lib/docker

关闭docker服务:

shell
sudo systemctl stop docker.service

创建一个新的文件夹作为docker镜像新的存储位置,记下这个文件夹的路径:

shell
sudo mkdir -p /data/docker

编辑docker配置文件:

shell
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service # 将ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改以下内容: ExecStart=/usr/bin/dockerd --graph=/data/docker --storage-driver=overlay2

开启docker来更新配置:

shell
sudo systemctl daemon-reload sudo systemctl start docker

方法二、

使用软链接不需要修改配置文件

将原来的/var/lib/docker/ 目录 移动到 新的目录 我这里新目录是 /data/

shell
#停服务 systemctl stop docker.server #移动目录 mv /var/lib/docker/ /data/ #创建软连接 ln -s /data/docker/ /var/lib/
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:ZYW

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!