Docker命令行总结

运行 ‘docker COMMAND –help’ 获取更多命令使用信息

docker-compose–用于定义和运行复杂Docker应用的工具。可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,所有相关的操作都会被自动完成

Dockerfile–Docker指令脚本

输入docker命令来查看所有的Options和Commands

1
~ docker

查看docker信息

1
~ docker info

搜索可用的docker镜像

1
~ docker search IMAGE_NAME

下载镜像

1
~ docker pull IMAGE_NAME[:TAG]

查看容器或镜像的详细信息

1
~ docker inspect CONTAINERID|IMAGE

参数可以是容器的ID或者是镜像名(IMAGE_NAME:TAG)

删除镜像

1
~ docker rmi IMAGE

查看镜像的历史版本

1
~ docker history IMAGE

查看容器

1
2
3
4
5
6
# 查看容器
~ docker ps -a
# 查看最近生成的容器
~ docker ps -l
# 查看正在运行的容器
~ docker ps

创建一个新容器并登入

1
2
3
4
5
~ docker run -i -t IMAGE /bin/bash
# or
~ docker run -p 80:80 -d IMAGE
# or
~ docker run -v ~/Public/www:/var/www:rw -p 80:80 -d IMAGE

使用image创建container并进入交互模式,login shell是/bin/bash,现在可以自由的对容器进行操作了。最后使用exit退出容器。

注意:如果IMAGE参数不指定TAG,默认TAG为latest。

启动一个退出的容器

1
~ docker start CONTAINER_ID

重新启动正在运行的容器

1
~ docker restart CONTAINER_ID

attach到运行中的容器

1
~ docker attach CONTAINER_ID

停止正在运行的容器

1
~ docker stop CONTAINER_ID

删除容器

1
2
3
4
5
~ docker rm CONTAINER_ID
# 查看所有容器ID:
~ docker ps -a -q
# 删除所有的容器:
~ docker rm $(docker ps -a -q)

保存对容器的修改并生成新的镜像

1
~ docker commit -m "commit message" -a "author" commit CONTAINER_ID [REPOSITORY[:TAG]]

显示容器的标准输出

1
~ docker logs CONTAINER_ID

从容器内复制文件到指定的路径

1
~ docker cp CONTAINER_ID:PATH HOST_PATH

停止容器主进程

1
~ docker kill CONTAINER_ID

列出容器内变化的文件和目录

1
~ docker diff CONTAINER_ID

镜像导入/导出

1
2
3
4
5
6
7
8
# 导出镜像
~ docker save -o ~/Desktop/jenkins.tar jenkins
# or
~ docker save jenkins > ~/Desktop/jenkins.tar
# 导入镜像
~ docker load -i ~/Desktop/jenkins.tar
# or
~ docker load < ~/Desktop/jenkins.tar

容器导入/导出

用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,

也可以使用 docker import 来导入一个容器快照到本地镜像库。

这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),

而镜像存储文件将保存完整记录,体积也要大。

此外,从容器快照文件导入时可以重新指定标签等元数据信息

1
2
3
4
5
6
7
8
# 导出镜像
~ docker export -o ~/Desktop/nginx.tar 8b2aac5c6df2
# or
~ docker export 8b2aac5c6df2 > ~/Desktop/nginx.tar
# 导入镜像
~ docker import http://example.com/nginx.tar example/imagerepo
# or
~ cat nginx.tar | docker import - repo/name:tag

Step 1. Launch a postgresql container

1
2
3
4
5
6
docker run --name gitlab-postgresql -d \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \
--env 'DB_EXTENSION=pg_trgm' \
--volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.5

Step 2. Launch a redis container

1
2
3
docker run --name gitlab-redis -d \
--volume /srv/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest

Step 3. Launch the gitlab container

1
2
3
4
5
6
7
docker run --name gitlab -d \
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
--publish 10022:22 --publish 10080:80 \
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:8.10.6