Docker常用命令集锦

最近业余时间一直在研究使用Docker,这里把经常使用的一些命令总结下:

一、第一部分

查看本地所有的镜像

docker images

查看运行的容器实例

docker ps [OPTIONS]

OPTIONS说明:

-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

--format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

--no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。

查看容器内进程

docker top 容器ID或容器名

显示 Docker 系统信息,包括镜像和容器数

docker info

显示Docker版本信息

docker version

二、第二部分

启动容器

docker run -i -t -v /mnt/software/:/mnt/software/ 25c5298b1a36 /bin/bash

docker run <相关参数> <镜像ID> <初始命令>

其中,相关参数包括:

-i:表示以“交互模式”运行容器

-t:表示容器启动后会进入其命令行

-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。

需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。

初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。

启动Java Web容器

docker run -d -p 58080:8080 --name javaweb 25c5298b1a36 /root/run.sh

-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。

-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。

--name:表示容器名称,用一个有意义的名称命名即可。

查看容器日志

docker logs -f -t --since="2018-02-08" --tail=100 1e26896f7d14

docker logs [OPTIONS] CONTAINER

Options:

--details 显示更多的信息

-f, --follow 跟踪实时日志

--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)

--tail string 从日志末尾显示多少行日志, 默认是all

-t, --timestamps 显示时间戳

--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

启动一个已经停止的容器实例

docker start 容器ID或容器名

停止一个正在运行的容器

docker stop 容器ID或容器名

参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态

docker stop -t=60 容器ID或容器名

docker kill 容器ID或容器名 :直接关闭容器

退出容器

CTRL+P CTRL+Q退出容器交互式bash,保持容器运行

exit退出容器,容器停止运行

重启一个容器

docker restart 容器ID或容器名 :不管容器是否启动,直接重启容器

进入一个已经在运行的容器 / 在运行中容器内启动新进程

docker exec [-d] [-i] [-t] 容器ID或容器名 [command][arg...]

docker exec -it 775c7c9ee1e1 /bin/bash

附加到运行中的容器

docker attach 容器ID或容器名

删除容器container

docker rm 容器id

删除镜像images

docker rmi <image id>

想要删除untagged images,也就是那些id为<None>的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

docker rmi $(docker images -q)

获取容器/镜像的元数据

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

-f :指定返回值的模板文件。

-s :显示总的文件大小。

--type :为指定类型返回JSON。

从Docker Hub查找镜像

docker search [OPTIONS] TERM

OPTIONS说明:

--automated :只列出 automated build类型的镜像;

--no-trunc :显示完整的镜像描述;

-s :列出收藏数不小于指定值的镜像。

从镜像仓库中拉取或者更新指定镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

-a :拉取所有 tagged 镜像

--disable-content-trust :忽略镜像的校验,默认开启

docker pull tomcat:8

docker pull centos

将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

docker push [OPTIONS] NAME[:TAG]

OPTIONS说明:

--disable-content-trust :忽略镜像的校验,默认开启

从容器创建一个新的镜像

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

OPTIONS说明:

-a :提交的镜像作者;

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

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

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

docker commit ef27c9a23b26 wangpf/javaweb:0.1

该容器的ID是ef27c9a23b26,所创建的镜像名是wangpf/javaweb:0.1

使用 Dockerfile 创建镜像

docker build [OPTIONS] PATH | URL | -

OPTIONS说明:

--build-arg=[] :设置镜像创建时的变量;

--cpu-shares :设置 cpu 使用权重;

--cpu-period :限制 CPU CFS周期;

--cpu-quota :限制 CPU CFS配额;

--cpuset-cpus :指定使用的CPU id;

--cpuset-mems :指定使用的内存 id;

--disable-content-trust :忽略校验,默认开启;

-f :指定要使用的Dockerfile路径;

--force-rm :设置镜像过程中删除中间容器;

--isolation :使用容器隔离技术;

--label=[] :设置镜像使用的元数据;

-m :设置内存最大值;

--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

--no-cache :创建镜像的过程不使用缓存;

--pull :尝试去更新镜像的新版本;

--quiet, -q :安静模式,成功后只输出镜像 ID;

--rm :设置镜像成功后删除中间容器;

--shm-size :设置/dev/shm的大小,默认值是64M;

--ulimit :Ulimit配置。

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

--network: 默认 default。在构建期间设置RUN指令的网络模式

三、第三部分

DOCKER 给运行中的容器添加映射端口

获得容器IP

docker inspect 'container_name' | grep IPAddress

iptable转发端口

将容器的8000端口映射到docker主机的8001端口

iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080

查看端口映射

docker port 容器Id

提交一个运行中的容器为镜像

docker commit containerid foo/live

运行镜像并添加端口

docker run -d -p 8000:80 foo/live /bin/bash

删除端口映射规则

获取规则编号

iptables -t nat -nL --line-number

根据编号删除规则

iptables -t nat -D DOCKER $num

猜你喜欢

转载自blog.csdn.net/wangpf2011/article/details/87025218
今日推荐