1 查看所有容器

可使用

docker ps -a

查看所有容器。

2 基于已有镜像启动容器

以ubuntu镜像为例,如果之前没有拉取ubuntu镜像,先使用

docker pull ubuntu

拉取镜像,然后根据ubuntu镜像启动一个容器并进入该容器

docker run -i -t --name=my_ubuntu ubuntu /bin/bash

其中:

  • -i:表示交互式操作
  • -t:表示终端
  • --name:设置容器名字,此时容器名称为my_ubuntu
  • ubuntu:表示使用ubuntu镜像为基础运行一个容器
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

如果想要容器后台运行,则加上-d,即

docker run -i -t -d ubuntu /bin/bash

要想退出容器终端,直接输入

exit

退出容器即可。

3 根据容器ID启用容器、停止容器、重启容器

通过

docker ps -a

查看当前所有容器,并获取需要操作的容器的ID。

然后通过以下命令启用容器、停止容器、重启容器

docker start <容器ID或者名称> # 启动一个已停止的容器
docker stop <容器ID或者名称> # 停止一个容器
docker restart <容器ID或者名称> # 重启一个容器

4 进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下命令进入:

  • docker attach
  • docker exec

推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

docker attach

docker attach <容器ID或者名称>

使用这种方法进入容器,然后使用exit退出容器,会导致容器停止。

docker exec

docker exec -it <容器ID或者名称> /bin/bash

使用这种方法进入容器,然后使用exit退出容器,不会导致容器停止。

5 导入和导出容器

5.1 export和import

(1)使用 docker export 命令根据容器ID将镜像导出成一个文件

docker export <容器ID或者名称> > <文件名>

比如

docker export f299f501774c > hangger_server.tar

(2)使用 docker import 命令导入镜像文件

docker import - <镜像名称> < <文件名称>

比如

docker import - new_hangger_server < hangger_server.tar

5.2 save和load

(1)使用 docker save 命令根据 ID 将镜像保存成一个文件

docker save [OPTIONS] IMAGE [IMAGE...]  ## 语法
## -o, --output string   参数 -o 写入指定的文件。

比如

docker save -o nginx.tar nginx:latest

其中 nginx.tar 为保存的文件名,其中 nginx:latest 为镜像名称和标签。

(2)使用 docker load 命令将载入镜像文件

docker load [OPTIONS]  ## 导入镜像语法
## Options:
##   -i, --input string   指定镜像位置
##   -q, --quiet          抑制输出内容

比如

docker load -i nginx.tar

6 删除容器

可使用以下命令删除容器

docker rm -f <容器ID或者名称>

7 命名容器

当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 --name 标识来命名容器,例如:

docker run -i -t --name stubbornhuang_ubuntu ubuntu /bin/bash 

8 容器网络端口映射

容器中可以运行服务器应用,如果要让外部也可以访问这些服务,就需要进行docker内部端口与本机端口的映射,我们可以使用-P-p参数指定容器的端口映射,其中

  • -P:是容器内部端口随机映射到主机的端口
  • -p:是容器内部端口映射到指定的主机端口

比如,创建一个java服务器应用的容器,端口为19994,使用-P进行容器端口随机映射到主机端口

docker run -d -P myjava java -jar ./server.jar

使用docker ps可以看到将容器端口19994随机映射到了端口8865

runoob@runoob:~$ docker ps
CONTAINER ID    IMAGE               COMMAND            ...           PORTS                     NAMES
fce072cc88ce   myjava      "java -jar ./server.jar"    ...     0.0.0.0:8865->19994/tcp      grave_hopper

如果不想随机映射端口,可以使用-p直接指定端口,比如将容器端口19994指定映射到主机端口19995

docker run -d -p 19995:19994 myjava java -jar ./server.jar

我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1,这样就可以通过访问 127.0.0.1:19995来访问容器的19994端口

docker run -d -p 127.0.0.1:19995:19994 myjava java -jar ./server.jar

上面的例子中,默认都是绑定tcp端口,如果要绑定udp端口,可以在端口后面加上 /udp,如

docker run -d -p 19995:19994/udp myjava java -jar ./server.jar

我们可以使用

docker port <容器ID或者名称>

指定上述命令之后将会返回容器的所有映射端口信息。例如:

80/tcp -> 0.0.0.0:32769

其中80/tcp表示容器内部的端口号,0.0.0.0表示容器所在的主机地址,32679表示映射到主机上的端口号,我们可以通过访问主机的32769端口来访问容器内部的应用程序。

如果容器未映射任何端口,则docker port命令不会有任何输出。