简介
- docker常用技巧
docker 启动容器并分离到后台
1 | docker run -id -p 4000:4000 jekyll/ubuntu:v1 /bin/bash |
docker 镜像存储位置
Docker 镜像存储位置取决于你在安装 Docker 时所选择的存储驱动程序。Docker 默认使用“overlay2”存储驱动程序,它会将镜像存储在 /var/lib/docker/overlay2 目录下。但是,如果你使用的是其他存储驱动程序,那么镜像存储位置可能会有所不同。
你可以通过以下命令查看 Docker 镜像存储位置:
1
docker info | grep -i 'docker root dir'
在输出结果中,你将看到存储路径的具体位置。例如:
1
Docker Root Dir: /var/lib/docker
如果你想将 Docker 镜像存储到不同的位置,可以通过以下步骤进行设置:
停止 Docker 服务:
1
sudo systemctl stop docker
移动 /var/lib/docker 目录到新的位置,例如 /new/docker/path:
1
sudo mv /var/lib/docker /new/docker/path
创建一个指向新目录的符号链接:
1
sudo ln -s /new/docker/path /var/lib/docker
启动 Docker 服务:
1
sudo systemctl start docker
现在,Docker 镜像将被存储在新的位置 /new/docker/path 中。请注意,这种更改可能会导致现有的 Docker 容器无法正常运行,因此请谨慎操作。
网络模式设置
在 Docker 中,-net=host
是一种网络模式选项,用于指定容器的网络命名空间。当你使用该选项时,容器将与宿主机共享网络命名空间,这意味着容器将使用宿主机的网络栈,与宿主机具有相同的网络接口和IP地址。
具体来说,使用-net=host
选项,容器内的网络配置与宿主机完全一致,容器可以直接访问宿主机上的网络接口和端口。这样的配置有一些优势和限制:
优势:
- 简化网络配置:使用该选项,不需要再单独设置容器的网络配置,容器直接继承宿主机的网络配置。
- 容器与宿主机共享IP地址:可以让容器直接使用宿主机的IP地址,方便某些网络应用场景。
限制:
- 安全性:容器与宿主机共享网络命名空间,容器内的进程可以直接访问宿主机的网络,这可能会增加潜在的安全风险,因此需要格外小心。
- 端口冲突:由于容器与宿主机共享网络,如果宿主机上已经在使用的端口被容器尝试使用,可能会导致端口冲突。
- 主机网络的限制:由于容器使用宿主机网络栈,容器将受到宿主机网络设置和限制的影响。
在大多数情况下,推荐使用默认的网络模式,Docker会为容器分配独立的网络命名空间,从而保持隔离和安全性。只有在特定的使用场景下,才应该考虑使用-net=host
选项。
请注意,Docker在不同版本中可能会有一些变化,因此建议查阅最新的Docker文档以获得最准确的信息。
保存镜像
- 使用命令:
tar cvf image.tar --exclude=/proc --exclude=/image.tar /
, 在容器里打包系统所需要的文件,- 记录以下:
tar cvf image.tar --exclude=/system --exclude=/sys --exclude=/proc --exclude=/image.tar /
- 记录以下:
sudo docker cp containerID:/image.tar ./
, 将容器中打包的文件拷贝到主机中cat image.tar | sudo docker import - image:v1
, 导入镜像
linux下重启,启动,关闭docker服务
sudo systemctl start docker
: 启动sudo systemctl daemon-reload
: 守护进程重启sudo systemctl restart docker
orsudo service docker restart
: 重启docker服务sudo service docker stop
orsudo systemctl stop docker
: 关闭docker
以非root用户身份管理
- Docker守护程序绑定到Unix套接字而不是TCP端口,默认情况下,Unix套接字的用户有root,其它用户只能使用sudo来访问。 Docker守护程序始终以root用户身份运行
- 不想使用sudo,创建docker的Unix组,将用户添加到改组
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
镜像的上传和拉取
登录docker
docker login
修改镜像命名
- 修改镜像的repository,使之与Docker Hub账号匹配
- Docker Hub为了区分不同用户的同名镜像,镜像的
registry
中要包含用户名,完整的格式为:[username]/xxx:tag
- Docker官方自己维护的镜像没有用户名
镜像上传
- 通过
docker push
将镜像上传到Docker Hub
- 通过
镜像的拉取
- 上传的是公共镜像仓库,任何人都可以下载使用
根据这些md5目录名检查是哪个容器
docker inspect xxx | grep merge
查看容器日志
docker logs <container-id>
,查看日志- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18user@computer:test-docker$ docker logs 172
root@1722c360945f:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin src srv sys tmp usr var
root@1722c360945f:/# cd src
root@1722c360945f:/src# ks
bash: ks: command not found
root@1722c360945f:/src# ls
one.txt
root@1722c360945f:/src# ls
one.txt two.txt
root@1722c360945f:/src# cat two.txt
root@1722c360945f:/src# ls
two.txt
root@1722c360945f:/src# ls
two.txt
root@1722c360945f:/src# pwd
/src
user@computer:test-docker$
mount
docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu:18.04 bash