Docker 自身
查看版本
docker --version
详细信息
docker info
测试
测试 docker 正常安装。Docker 会检查本地是否有 hello-world 镜像,没有的话,会远程拉取一个。
docker run hello-world
查看帮助
docker command --help
docker run --help
镜像源
mac
vim ~/.docker/daemon.json
mac 的各种配置都在个人目录下。
centos
/etc/docker/daemon.json
{
"debug" : true,
"registry-mirrors" : [
"https://registry.docker-cn.com/"
],
"experimental" : true
}
镜像
搜索镜像
docker search centos
查看所有镜像
docker iamges
拉取镜像
docker pull xx
生成镜像
删除镜像
docker image rm image_id/image_name:tag
docker image rmi image_id/image_name:tag
问题1:镜像指向多个版本
删除时遇到的问题,镜像被指向多个版本
image is referenced in multiple repositories
方法:
不要使用 image_id 使用 image_name:tag 的方式进行删除
doceker rmi image_name:tag
问题2:镜像有依赖的子镜像
image has dependent child images
把容器及相关的容器全部删除。然后就可以正常删除了。
推送镜像到 DockerHub
登录 DockerHub 的账号
生成命名规范的镜像
tag 能根据已有的镜像生成新的镜像
docker tag source_image target_image
DockerHub 镜像的命名规范是,”注册用户名/镜像名”
docker tag source python3:py3_6_0_centos kougazhang/python3
有的时候网络状态不佳,即便推送成功,使用 docker search
也未必能搜索到。
推送
docker push name[:tag]
容器
查看所有容器
// 这两个命令都可以
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 run
常见参数
- -d, detach(分离),Run container in background and print container ID, 容器后台运行并打印 containerID
- -e, env, Set environment variables, 设置环境变量;环境变量是以 key-value 的形式设置。并且可以设置多个。
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
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 start container
容器只运行一次
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
销毁容器
docker container rm 0ee5/name
// 也可以简写
docker rm 0ee5
测试之后发现,不一定要写 contain_id,写name 也可以的. 但是 exec 命令就不可以使用 name。
删除多个容器
销毁正在运行的容器
docker rm -f 0ee5