docker 个人总结

docker 个人总结

强烈建议参照系统说明文档,docker <命令> --help

docker 常用命令

cp

docker 容器中经常需要与主机进行文件交互,一种简单的方式是通过 docker run -v 选项直接挂载文件系统,两边的文件修改都会被实时同步。不过如果运行之后需要临时进行文件传递,可以使用 cp 命令

docker cp src tgt

docker cp <容器名称>:<路径> <主机路径>
docker cp mycontainer:/opt/testnew/file.txt /opt/test/

docker cp <主机路径> <容器名称>:<路径> 
docker cp /opt/test/file.txt mycontainer:/opt/testnew/

如果指定路径为一个文件夹,那么整个文件夹将被拷贝 

inspect

docker inspect <选项><容器或镜像名称,id>:用于以JSON格式显示容器与镜像的详细信息

runoob@runoob:~$ docker inspect mysql:5.6
[
    {
        "Id": "sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec",
        "RepoTags": [
            "mysql:5.6"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2016-05-24T04:01:41.168371815Z",
        "Container": "e0924bc460ff97787f34610115e9363e6363b30b8efa406e28eb495ab199ca54",
        "ContainerConfig": {
            "Hostname": "b0cf605c7757",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "3306/tcp": {}
            },
...

load & save

docker save <选项><镜像名称>:<标签>:将镜像保存为tar包文件。镜像存储文件将保存完整记录

docker save -o <save image to path> <image name>

docker load <选项>:从tar文件创建镜像从tar文件创建镜像

docker load -i <path to image tar file>

同时可以通过组合 ssh 命令实现一条指令从一台机器拷贝镜像到另一台机器

docker save <image> | bzip2 | \
     ssh user@host 'bunzip2 | docker load'

# 也可以通过 pv 查看转移过程
docker save <image> | bzip2 | pv | \
     ssh user@host 'bunzip2 | docker load'
  • docker attach <选项><容器名称, id>:将标准输入(stdin)与标准输出(stdout)连接到正在运行的容器。需要注意的是通过 attach 连接容器之后,如果退出容器,容器将自动停止。因此更建议使用下面的 exec 命令
  • docker build <选项><Dockerfile路径>:命令使用Dockerfile文件创建镜像
  • docker commit <选项><容器名称,id>/<镜像名称>:<标签>:用于从容器的修改项创建新的镜像
  • docker create <选项><镜像名称,id><命令><参数>:使用指定的镜像创建容器。与run命令不同,使用create命令只能创建容器而并不启动
  • docker diff <容器名称,id>:用于检查容器文件系统的修改
  • docker exec <选项><容器名称,id><命令><参数>:从外部运行容器内部的命令
  • docker export <容器名称,id>:用于将容器的文件系统导出为tar文件包,其仅保存容器当时的快照状态。容器快照文件将丢弃所有的历史记录和元数据信息
  • docker history <选项><镜像名称,id>:用于显示镜像的历史。此处的历史依据Dockerfile文件中的设置创建。
  • docker images <选项><镜像名称,id>:查看当前电脑上存在的 docker 镜像
  • docker import <tar文件的URL或者 - ><注册名称>/<镜像名称>:<标签>:用于从压缩为tar文件(.tar .tar.gz .tgz .bzip .tar.xz .txz)的文件系统创建镜像。从容器快照文件导入时可以重新指定标签等元数据信息。
  • docker info:用于显示当前系统信息、docker容器、镜像个数、设置等信息。
  • docker login <选项><Docker 注册服务器的URL>:用于登录Docker 的注册服务器
  • docker logout <选项><Docker 注册服务器的URL>:用于从Docker注册服务器中登出
  • docker logs <容器名称,id>:用于输出容器日志
  • docker port <容器名称,id><端口>:用于查看容器的某个端口是否处于开放状态
  • docker ps <选项>:查看当前电脑上存在的 docker 容器
  • docker pull <选项> <容器名称,id>:从Docker注册服务器获取镜像
  • docker push <注册名>/<镜像名>:<标签>:将镜像推送到Docker注册服务器
  • docker rm <选项><容器名称,id>:删除创建容器
  • docker rmi <注册名称>/<镜像名称,id>:<标签>:用于删除镜像。若不指定标签,则删除latest标签
  • docker run <选项><镜像名称,id><命令><参数>:指定镜像创建容器,并启动容器。run 命令默认会执行 /bin/bash
  • docker restart <选项><容器名称,id>:重启容器,不包含容器文件系统的卸载与挂载操作。本质上 restart 命令不涉及文件系统的操作,因此restart命令并不是stop与start两个命令的顺序叠加。
  • docker search <选项><搜索词>:用于在docker hub 中搜索镜像
  • docker start <选项><容器名称,id>:用于启动容器,包含容器文件系统挂载的操作
  • docker stop <选项><容器名称,id>:停止容器,包含容器文件系统卸载的操作
  • docker tag <选项><镜像名称,id> <用户名/镜像新名称:id>:为一个镜像起一个别名,两个镜像本质共用物理存储
  • Ctrl+D 或者 exit:退出容器

docker 命令选项介绍

  • -d:Detach模式,一般为守护进程模式,容器以后台方式运行。比如 run 命令不加 -d 将直接进入容器
  • -i:开启标准输入,即使未与容器连接,也维持标准输入
  • --name:指定容器的名字
  • -t:使用TTY模式(pseudo-TTY)若要使用bash,则必须设置该选项。若不设置该选项,则虽然输入命令,但不显示shell

最后详解一个复杂命令吧

docker run -d -it --net=host -v /home/test/:/home/test/ --gpus all --name test test:1.0

其指定在后台启动(-d),连接了输入输出(-i),启动了模拟终端(-t),使用宿主机网络(-net=host),映射端口( -p 50052:50052 配置 --net=host 自动映射对应端口),挂载宿主机文件系统(-v,使用完整路径),映射宿主机 gpu(-gpus),指定启动容器的名字(--name),docker 内部内存不足可以指定为主机内存(--ipc=host),指定运行的镜像和版本(test:1.0)

docker 服务重启

  •  sudo systemctl daemon-reload:重启守护进程
  • systemctl restart docker,sudo service docker restart:重启docker服务

问题及解决方案

  • docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].:可以使用 systemctl restart docker 重启 docker
  • ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).:可以添加 --ipc=host 选项启动 docker
  • Got permission denied while trying to connect to the Docker daemon socket at ....:需要添加当前用户 docker 执行权限。
To create the docker group and add your user:

1、Create the docker group.
sudo groupadd docker

2、Add your user to the docker group.
sudo usermod -aG docker ${USER}

3、You would need to loog out and log back in so that your group membership is re-evaluated or type the following command:

su -s ${USER}
  • docker push 私有仓提示(net/http: request canceled (Client.Timeout exceeded while awaiting headers):需要配置一下docker 的 no_proxy(/etc/systemd/system/docker.service.d/http-proxy.conf),配置之后重启 docker
  • docker push 私有仓提示(http: server gave HTTP response to HTTPS client):Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交时出现以上错误。需要配置一下 /etc/docker/daemon.json 添加 { "insecure-registries":["192.168.1.100:5000"] }

猜你喜欢

转载自blog.csdn.net/a40850273/article/details/104510863