Docker常用命令整理

Docker常用命令整理

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker基础命令

docker images 查看当前下载镜像列表

1
2
3
4
5
[root@VM_175_142_centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hwdsl2/ipsec-vpn-server latest 62e5a169190a 7 months ago 206MB
postgres latest 30bf4f039abe 8 months ago 312MB
redis latest 0f88f9be5839 8 months ago 95MB

docker search {镜像名} (镜像仓库中的镜像)
docker pull {镜像名}:{版本号} (拉取指定版本镜像,如果不指定版本, 将默认使用 latest 镜像)
docker run -t -i {镜像名} (启动镜像,如果主机不存在,会自动下载镜像)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-d, --detach=false, 设置容器上前台运行还是后台运行,默认为false后台运行
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,可以支持终端登录,默认为false
-u, --user="", 设置容器的用户
-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="" 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[], 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[], 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[], 添加主机设备给容器,相当于设备直通
--dns=[], 指定容器的dns服务器
--dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="", 覆盖image的入口点
--env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[], 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge" 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置

--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no" 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

docker run -d --name=nginx nginx:latest -p 宿主机端口:容器端口 -v 宿主机目录:容器目录

docker ps #查看正在运行的容器
docker ps -l #查看最后退出的容器的ID
docker ps -a #查看所有的容器,包括退出的。
docker logs {容器ID|容器名称} #查询某个容器的所有操作记录。
docker logs -f {容器ID|容器名称} #实时查看容易的操作记录。

1
2
3
4
docker rm$(docker ps -a -q) #删除所有容器
docker rm {容器ID|容器名} #删除单个容器
docker rmi {镜像ID} #删除单个镜像
docker rmi$(docker images | grep none | awk '{print $3}' | sort -r) #删除所有镜像

docker stop {容器ID|容器名} #停止某个容器
docker start {容器ID|容器名} #启动某个容器
docker kill {容器ID|容器名} #杀掉某个容器

docker export {容器ID|容器名} -o /root/文件名.tar(或者docker export {容器ID|容器名} > /root/文件名.tar) #导出
docker import {容器文件} {镜像名}:{tag} #导入后生成的是镜像不是容器,docker load也可以导入,其中两者人区别如下:

1
2
docker load 保留了容器的完整记录
docker import 仅保存容器当时的快照状态,在导入的时候自己定义标签、名称等元数据

docker container inspect {容器ID|容器名} #返回容器的ID、创建时间、路径、状态、镜像等信息
docker container stats {容器ID|容器名} #查看容器的CPU、内存、存储、网络等资源的使用情况可以使用
docker cp {宿主机目录} {容器ID}:{容器目录} #将宿主机内的指定目录文件传输至容器内部的指定目录
docker cp {容器ID}:{容器目录} {宿主机目录} #将容器内部的指定目录文件复制到宿主机指定目录
docker commit {容器ID} {镜像名}:{tag} #将容器重新打包成镜像

1
2
3
4
5
6
7
-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

docker push {镜像名|镜像ID} #推送在镜像仓库

Dockerfile文件参数

FROM #指定基础镜像,必须为第一个命令
MAINTAINER #作者信息
RUN #构建镜像时执行的命令
ADD #复制文件到容器中
COPY #复制文本到容器中COPY <源路径>… <目标路径>

1
ADD和COPY的差别:ADD命令tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,COPY不会自动解压文件,也不能访问网络资源

CMD #容器启动时执行的命令。shell 格式: CMD <命令> exec 格式: CMD [“可执行文件”, “参数1”, “参数2”…]
ENTRYPOINT #配置容器
LABEL #为镜像添加元数据
ENV #设置环境变量
EXPOSE #指定外界交互的容器端口EXPOSE <端口1> [<端口2>…]
VOLUME #指定持久化目录VOLUME [“<路径1>”, “<路径2>”…]
WORKDIR #工作目录,自动cd到执行目录

示例:

1
2
3
4
5
6
7
8
9
10
11
12
 # FROM代表此次构建的镜像的基础镜像基础,可在镜像名后带版本号,不带版本号默认latest
FROM python
# COPY是拷贝宿主机文件到镜像中
COPY ./spider /work
# RUN则是在镜像中执行命令,有时候可能需要安装依赖环境,也可以在run中执行
RUN ls /work
# 切换工作目录,相当于cd work
WORKDIR /work
#EXPOSE 外界交互的端口
EXPOSE 8080
# CMD是镜像启动后默认执行,CMD加中括号等同于exec执行命令,不加中括号等同于 sh -c 执行命令
CMD ["python","spider.py"]

docker build ocnfig #用于检查dockerfile文件是否有误
docker build . -t spider:v1.0 #构建镜像,构建好之后可以使用docker images命令进行查询

Docker-compose.yml文件配置

build:定义镜像生成,可以指定Dockerfile构建,在up 启动之时执行构建任务

image:指定镜像启动容器,如果镜像不存在会自动拉去最新镜像

environment:环境变量和配置

ports:端口映射,将容器端口映射在宿主机

depends_on:指定依赖关系。适用于需要按顺序启动的服务,会先启动所依赖的镜像

volumes:挂载宿主机目录或者数据容器卷

volumes_from: 从容器挂载

context:指定Dockerfile文件或者是远程网络文件

args:构建参数,这些参数只能在构建过程中访问

container_name:指定容器名称

links: 链接其他容器

command: 启动执行命令

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3"

services:
pgsql:
image: postgres
ports:
- "15432:5432"
environment:
POSTGRES_PASSWORD: scyd!
volumes:
- ./data/postgresql_data1:/var/lib/postgresql/data
restart: always

redis:
image: redis
command: redis-server --requirepass scyd!
ports:
- "16379:6379"
volumes:
- ./data/redis_data1:/data
restart: always

执行docker-compose ps:

1
2
3
4
5
[root@VM_175_142_centos ~]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
root_pgsql_1 docker-entrypoint.sh postgres Up 0.0.0.0:15432->5432/tcp
root_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:16379->6379/tcp

容器名:{目录名}{服务名}{容器序号} 从1开始

docker-compose up -d #构建并启动容器,首次运行会执行docker-compose build

1
2
3
4
-d:后台进程

--scale:指定服务运行的容器个数(如果服务有对外的端口就不能指定多个容器,因为端口已经被占用) 
 Eg:docker-compose up -d --scale web=1 --scale redis=2

docker-compose exec {服务名称} bash #登录到某个容器中

docker-compose down #删除所有容器,镜像

docker-compose ps #显示所有容器

docker-compose restart {服务名称} #重新启动容器

docker-compose build {服务名称} #构建镜像 。

docker-compose build –no-cache {服务名称} #不带缓存的构建。

docker-compose logs {服务名称} #查看容器的日志

docker-compose logs -f {服务名称} #查看容器的实时日志

docker-compose rm {服务名称} #删除compose服务

docker-compose kill {服务名称} #kill compose服务

docker-compose stop {服务名称} #重启compose服务

docker-compose start {服务名称} #启动容器

docker-compose config -q #验证yml文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息

docker-compose run {服务名} {cmd} #在某个服务上运行shell命令

You forgot to set the qrcode for Alipay. Please set it in _config.yml.
You forgot to set the qrcode for Wechat. Please set it in _config.yml.
You forgot to set the business and currency_code for Paypal. Please set it in _config.yml.
You forgot to set the url Patreon. Please set it in _config.yml.
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×