shell#从网络上下载docker源码包,自己有的可以使用自己的
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-18.09.0.tgz --no-check-certificate
shelltar xf docker-18.09.0.tgz
cp docker/* /usr/bin/
#解压缩docker安装包 拷贝命令到/usr/bin下
shellvim /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
shellsystemctl start docker
shelldocker images #统计本地镜像 docker ps #查看运行中的进程 docker rename oldname newname #更改已运行容器名 docker stop name/id #停止一个正在运行的容器 docker rm -f nginx_02 #删除运行中/运行过的容器nginx_02
shelldocker 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就说明这个路径只能通过宿主机来操作,容器内容无法操作
shell1、搜索镜像 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、下载镜像
shelldocker 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、创建容器启动镜像
shelldocker 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、创建过程
shelldocker run -dit --name nginx_01 -p 1234:80 -v /nginx/html:/usr/share/nginx/html nginx:latest
1、数据卷增删改查
pythondocker 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和端口
shelldocker 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
pythonbridge网卡:桥接模式,只要使用桥接模式创建的容器,网段都是一样的
1、查看系统中的网络模式
shelldocker network ls #查看系统中的网络模式
2、创建新的网络模式
shelldocker network create XXX #创建网络网络模式 docker network create --driver bridge my_bridge #基于现有的网络模式创建
3、通过网络模式断开其中某个容器的网络
shelldocker network disconnect bridge nginx_01 #断开nginx_01的网络连接
4、通过网络模式连接其中断开连接的容器的网络
shelldocker network connect bridge nginx_01 #连接上nginx_01容器的网络连接
5、删除网络模式
shelldocker network rm my_bridge #删除我创建的my_bridge网络
20230310更新
docker修改默认镜像和容器的存储位置
方法一、
Docker 默认的位置在/var/lib/docker,当前所有的镜像、容器都存储在这儿。如果你有任何在运行的容器,停止这些容器,并确保没有容器在运行,然后运行以下命令,确定当前Docker使用的存储驱动
sudo docker info 在输出的信息中,查找Storage Driver那行,并记下:
shellStorage Driver: overlay2
docker存储根目录:
shellDocker Root Dir: /var/lib/docker
关闭docker服务:
shellsudo systemctl stop docker.service
创建一个新的文件夹作为docker镜像新的存储位置,记下这个文件夹的路径:
shellsudo mkdir -p /data/docker
编辑docker配置文件:
shellsudo 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来更新配置:
shellsudo 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/
本文作者:ZYW
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!