Docker常用命令总结

Docker容器的使用

查看Docker的所有命令

docker

查看某个命令详细的帮助,用 --help

docker command --help

拉取镜像

docker pull centos

启动容器
参数说明:
i:交互式的操作
t:中端
/bin/bash 房子镜像名后面,是命令,在这里是一个交互式的Shell

docker run -it ubuntu /bin/bash

使用该命令会在启动容器后进入ubuntu容器的内部,要退出可以用exit

查看所有容器的命令如下:

docker ps -a

启动一个容器

docker start

要在启动一个容器后不进入,可以用 -d参数

docker run -itd --name ubuntu-test ubuntu /bin/bash

停止、重启一个容器

docker stop <容器 ID>
docker restart <容器 ID>

进入容器

docker attach <容器ID>

docker exec <容器ID>
推介使用后一种,前一种会导致容器停止

导出容器可以使用docker export命令

docker export <ID> 本地文件路径

导入容器快照
使用 docker import从容器快照文件中再导入为镜像

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

删除容器

docker rm -f <ID>

使用Docker运行一个web应用
以运行一个Flask的应用为例子

docker pull training/webapp #载入镜像
docker run -d -P training/webapp python app.py

-P参数的作用是将容器内部使用的网络端口随机映射到我们使用的主机上。
也可以用-p来设置不一样的端口

docker run -d -p 5000:5000 training/webapp python app.py

可以使用docker port来查看端口情况

docker port <ID/NAME>

查看WEB应用程序日志

docker logs -f <ID>

-f参数的作用是标准输出,和tail -f类似。

查看容器内部容器的进程

docker top

使用docker inspect来查看Docker的底层信息,它会返回一个JSON文件记录着Docker容器的配置和状态信息。

docker inspect <ID/NAME>

移除容器
删除容器时,容器必须是停止状态

docker rm <ID/NAME>

Docker镜像使用

列出镜像列表

docker images

各个选项的说明
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签(版本号)
IMAGE ID:镜像ID
CREATED:镜像创建的时间
SIZE:镜像大小

查找镜像

docker search httpd

NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布
STARS:类似GitHub里的star
AUTOMATED:自动构建

拉取镜像,运行镜像的命令在前面也有

docker pull
docker run

删除镜像

docker rmi <ID/NAME>

创建镜像
有两种方法:
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用DcokerFile指令创建一个新的镜像

首先启动一个镜像,然后在容器内部使用apt-get update命令进行更新
完了使用docker commit来提交容器的副本。

docker commit -m="has update" -a="runoob" <ID> runoob/ubuntu:v2

-m:提交的描述信息
-a:指定镜像的作者
runoob/ubuntu:v2:指定要创建的目标镜像名

构建镜像,使用命令 docker build需要创建一个Dcokerfile文件

runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。

接下来使用docker build命令来构建一个镜像

docker bulid -t runoob/centos:6.7 .

-t参数用于指定创建的目标镜像名
“.” 是DockerFile文件所在的目录,可以指定Dockerfile文件的绝对路径

设置镜像的标签

docker tag <ID> runoob/centos:dev

Docker容器连接

如前面提到的,容器端口对外开放可以用 -p或者是-P(区别还记得吗?)
-p除了指定端口之外还能指定网络地址

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

如果要绑定UDP端口,可以在端口后面加上**/udp**

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

查询端口的绑定情况

docker port training/webapp 5000

创建一个容器时可以使用–name来对容器进行命名

docker run -d -P --name runoob training/webapp python app.py

可以用docker ps来查看容器的名称

docker ps -l

新建一个Docker网络

docker network create -d bridge test-net

-d用于指定Docker网络类型,有bridge,overlay等

运行一个容器并连接到新建的test-net网络

docker run -itd --name test1 --network test-net ubuntu /bin/bash

在同一个网络下的多个容器可以通过name来ping通彼此
安装ping

apt-get update
apt install iputils-ping

活学活用:可以在一个容器中装好,然后提交容器到镜像,以新的镜像重新运行容器

DNS的配置

在宿主机的/etc/docker/daemon.json文件中配置

{
	"dns" : [
		"114.114.114.114",
		"8.8.8.8"
	]
}

配置过后要重启Docker才会生效

docker run -it --rm ubuntu cat etc/resolv.conf

也可以手动指定

docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu

–rm:容器退出时自动清理容器内部的文件系统。

-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。

–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。

–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定–dns和–dns-search,Docker会默认用宿主机上的/etc/resolv.conf来配置DNS。

Docker仓库管理

Docker的官方公共仓库 Docker Hub

登录/登出

docker login
docker logout

推送镜像

docker tag ubuntu:18.04 usernema/ubuntu:18.04

username为Docker账号用户名


版权声明:本文为weixin_43932040原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。