安装
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 离线环境下下载 docker 相关的 rpm镜像包
https://download.docker.com/linux/centos/7/x86_64/edge/Packages/
如果是配置了国内镜像,并且镜像文件为/etc/docker/daemon.json
,则修改文件后缀为.conf
即可正常启动docker
服务
systemctl enable docker => 输出:Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
systemctl daemon-reload
systemctl start docker
systemctl status docker
docker info | grep "Docker Root Dir" 查看docker存放位置
生成
docker build -t="【镜像名:版本】" . (不要忘记最后的点,表示当前路径)#读取当前路径下的Dockerfile生成镜像
加载
docker load -i 【镜像包名】
启动
docker run -it 【镜像包名】 bash #启动一个新容器(-i 交互式 d 后台运行)
docker run -p 【host_port】:【container_port】【镜像包名】 bash (用-P(大写)标记时,docker会随机选择一个端口映射到容器)#绑定指定ip (查看端口是否被占用 netstat -anp| grep 端口号)
docker run --name 【name】 -it -v 【路径】【镜像包名】bash (-v 在容器中设置了一个挂载点,并将主机上的目录中的内容关联到容器的目录下)
nvidia-docker run -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video 【镜像包名】bash (-e 设置环境变量)
docker start 【短id/name】 #启动一个Exited的老容器
docker attach 【短id/name】 #进入容器,退出后容器会变成Exited (Control+P+Control+Q退出不会Exited)
docker exec -it 【短id/name】bash #进入容器,退出后容器继续运行 (只能进入running的容器,可以先start再exec)
查看
版本说明:17年之前版本 0.1.0 ~ 1.13.1,17年3月发布第一个新系列版本17.03,随后每季度发布一个stable版
GPU驱动说明:nvidia-docker2支持1.12以上docker; 自从docker19.03版本起,不再需要nvidia-docker2辅助,docker可直接使用GPU资源
nvidia驱动查看: nvidia-smi docker版本查看: docker version docker信息查看: docker info nvidia-docker2版本查看: nvidia-docker version
docker images #查看所有镜像
docker ps -a #查看所有容器的短id name 运行状态
docker ps -l #查询最后一次创建的容器
docker inspect -f '{{.ID}}' 【获得的短id/name】(如不加-f会输出所有)#获取长ID
docker port 【容器ID】#查看端口映射
docker logs 【容器ID】#查看应用的信息
docker history 【镜像名称】 #查看镜像历史 --no-trunc 全部显示
交互
docker cp 【本地文件路径 ID全称:容器路径】#传输本地文件到docker
docker cp 【ID全称:容器文件路径 本地路径】#传输docker文件到本地
权限
docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用
停止
docker stop 【短id/name】#停止容器
删除
docker rm 【短id/name】#删除容器
docker rmi [镜像名] #删除镜像
docker ps -a | grep 【关键字】 | awk '{print $1}' #列出所有相关容器id
docker ps -a | grep 【关键字】 | awk '{print $1}' | xargs docker rm -f #删除所有相关容器id
停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi 3}")
要删除全部image的话
docker rmi $(docker images -q)
保存
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] #从容器打镜像
导出
docker save [OPTIONS] IMAGE [IMAGE...] (-o :输出到的文件)#生成镜像包
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] #打tag
docker push IMAGE[:TAG] #推到镜像仓库
附录
Q: docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:279: applying cgroup configuration for process caused "mkdir /sys/fs/cgroup/memory/docker/xxx: cannot allocate memory"": unknown.
A: free -m 查看page cache ; echo 1 > /proc/sys/vm/drop_caches 清理page cache
https://github.com/opencontainers/runc/issues/1740
Q: 拿到一个新的镜像仓库地址xxx.xxx.xxx,怎么配置?
A: docker login xxx.xxx.xxx 登录新镜像;
vim ~/.docker/config.json 检查当前用户下保存的登录信息
echo xxxxxxxxxx | base64 -d 用base64解密用户名密码
Q: Cannot connect to the Docker daemon at xxx. Is the docker daemon running?
A: systemctl start docker
Q: 根目录磁盘满了
A: 根目录下的has文件会在几天内写满根目录磁盘,主要是出core的问题
touch /【路径】/disable_nss_core
写满的目录需要清理:
rm -rf /has/hdoctor/monitor/plugins/core.*
Q: 挪动默认安装目录时,遇到 rm: 无法删除"/var/lib/docker/overlay
A: umount /var/lib/docker/overlay
网友评论