Docker 自身

查看版本

  1. docker --version

详细信息

  1. docker info

测试

测试 docker 正常安装。Docker 会检查本地是否有 hello-world 镜像,没有的话,会远程拉取一个。

  1. docker run hello-world

查看帮助

  1. docker command --help
  2. docker run --help

镜像源

mac

vim ~/.docker/daemon.json mac 的各种配置都在个人目录下。

centos

/etc/docker/daemon.json

  1. {
  2. "debug" : true,
  3. "registry-mirrors" : [
  4. "https://registry.docker-cn.com/"
  5. ],
  6. "experimental" : true
  7. }

镜像

搜索镜像

  1. docker search centos

查看所有镜像

  1. docker iamges

拉取镜像

  1. docker pull xx

生成镜像

使用 Dockerfile 来生成镜像

删除镜像

  1. docker image rm image_id/image_name:tag
  2. docker image rmi image_id/image_name:tag

问题1:镜像指向多个版本

删除时遇到的问题,镜像被指向多个版本

  1. image is referenced in multiple repositories

方法:
不要使用 image_id 使用 image_name:tag 的方式进行删除

  1. doceker rmi image_name:tag

问题2:镜像有依赖的子镜像

  1. image has dependent child images

把容器及相关的容器全部删除。然后就可以正常删除了。

推送镜像到 DockerHub

登录 DockerHub 的账号

登录 DockerHub 的账号,docker login

生成命名规范的镜像

tag 能根据已有的镜像生成新的镜像

  1. docker tag source_image target_image

DockerHub 镜像的命名规范是,”注册用户名/镜像名”

  1. docker tag source python3:py3_6_0_centos kougazhang/python3

有的时候网络状态不佳,即便推送成功,使用 docker search 也未必能搜索到。

推送

  1. docker push name[:tag]

如果不指定tag,则默认tag 为 latest。

容器

查看所有容器

  1. // 这两个命令都可以
  2. docker ps -a
  3. docker container ls

结果:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 693c140a6e84 kougazhang/centos7-mongodb:4.0 "/usr/sbin/init" 16 hours ago Up 4 hours 0.0.0.0:29019->27017/tcp centos7-mongodb

image 这个地方是显示分支名:标签还是 imageId ,取决于容器创建时的方式。容器创建时,可以使用 imageId 或 imageName:tag 的方式。这个写脚本时遇到了,commit_image_changes.sh 的脚本,github 上有。

创建容器

  1. docker run

常见参数

  • -d, detach(分离),Run container in background and print container ID, 容器后台运行并打印 containerID
  • -e, env, Set environment variables, 设置环境变量;环境变量是以 key-value 的形式设置。并且可以设置多个。
  1. docker run -d --name mysql_database -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 rhscl/mysql-57-rhel7
  • -p, port, 绑定端口映射,格式:主机(宿主)端口:容器端口;
  • -v,挂载卷,宿主卷:容器卷。

    自动重启的容器

  1. docker run --restart=always container

restart 的相关参数:

  • no,默认为 no,挂掉后不重启
  • always, docker 重启时自动重启. kill 掉 docker 后并不会重启。
  • unless-stop, 含义和 always 差不多。
  • on-failure, 容器发生错误退出时重启。on-failure Number, number 是容器尝试自动重启的最大次数。

    关闭自动重启的容器

    如果容器在创建时没有指定 —restart 参数,可以通过使用 update 来指定。还可以通过更改配置,关闭已经设置为自动重启的容器。
    1. docker update --restart=no/always/... container

启动容器

  1. docker start container

这个命令只能启动容器,不能加 -t 参数进入打开的容器

容器只运行一次

docker run —rm [选项] [镜像名称] [命令]
使用 —rm参数在我们使用完这个容器,关闭就会自动删除。适用于 各种语言的解释器,只想让解释器执行一次命令。

重启容器

无论容器是否在运行,使用 restart 命令都可以重启容器。

  1. docker restart container

停止容器

  1. docker stop [options] container

-t, 表示过一定时间停止容器。

  1. docker kill container

退出容器

进入容器内部后,使用 exit 就会退出容器。退出容器,容器不会停止。只会在后台运行。

进入打开的容器

  1. docker exec contain_id command

contain_id不必写完,写前几位就可以,这点是和使用 Git 时的 commit_id 是一致的;
command 就是创建容器时的 command, 执行
举例,打开 centos 容器

  1. docker exec -it 0ee5 /bin/bash

查看容器

查看容器日志

  1. docker logs container id

查看容器挂载目录

  1. docker inspect containerName|grep -i mount

从容器生成/更新镜像

  1. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

如果 commit 命令中,[REPOSITORY[:TAG]]是存在的,如写为 xxx_peppsitory:latest , 那么照样会生成新的镜像。老的镜像的 REPOSITORY 和 TAG 都显示为 .
如果该 [REPOSITORY[:TAG]] 不存在,则创建新的镜像。如果只写 REPOSITORY,没有写 tag,则默认会生成新的 TAG 为 latest 的镜像。

options:

  • -a:提交镜像的作者;
  • -c:使用 Dockfile 的指令来创建镜像;
  • -m:提交镜像时的注释;
  • -p:— pause,提交镜像时暂停容器;

举例:

  1. docker commit -a "kougazhang" -m "centos7 installed python3.6.0" fc9935 python3:py3_6_0_centos

销毁容器

  1. docker container rm 0ee5/name
  2. // 也可以简写
  3. docker rm 0ee5

测试之后发现,不一定要写 contain_id,写name 也可以的. 但是 exec 命令就不可以使用 name。

删除多个容器

销毁正在运行的容器

  1. docker rm -f 0ee5