创建容器

示例:

  1. docker run -it -d --name batch_test_v31_m8 -p 8889:8889 batch_test:v3.1_m7

常见参数

  • -d:容器在后台运行。
  • -e, env, Set environment variables, 设置环境变量;环境变量是以 key-value 的形式设置。并且可以设置多个。
  • -it , -it is short for --interactive + --tty when you docker run with this command.. it would take you straight inside of the container
  • -itd, so if you run docker container with-itd it would run the-it options and detach you from the container, so your container still running in the background even without any default app to run..

    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,挂载卷,宿主卷:容器卷。

    自动重启的容器

docker run --restart=always container

restart 的相关参数:

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

    关闭自动重启的容器

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

    容器

    查看所有容器

// 这两个命令都可以
docker ps -a
docker container ls

结果:

CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                      NAMES
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 上有。

启动容器

docker start container

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

容器只运行一次

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

重启容器

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

docker restart container

停止容器

docker stop [options] container

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

docker kill container

退出容器

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

进入打开的容器

docker exec contain_id command

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

 docker exec -it 0ee5 /bin/bash

查看容器

查看容器日志

docker logs container id

查看容器挂载目录

docker inspect containerName|grep -i mount

从容器生成/更新镜像

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,提交镜像时暂停容器;

举例:

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

查看 command 命令

参考链接:https://stackoverflow.com/questions/32758793/how-to-show-the-run-command-of-a-docker-container/32774347
通过 docker 镜像创建的容器,它的 command 命令如何排查:
image.png
使用 runlike 工具:

pip install runlike
runlike $container_id

删除容器

docker container rm 0ee5/name
// 也可以简写
docker rm 0ee5

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

删除所有停止的容器

当然正在运行的容器不会删除

docker rm `docker ps -a -q`

销毁正在运行的容器

docker rm -f 0ee5