docker容器

容器(containe)是镜像的运行时实例.

容器

如果镜像是一个模版,那么容器(containe)就是镜像的运行时实例.

为什么要使用容器

与传统的虚拟机相比,容器有如下优势

  • 容器共享主机的资源, 更加轻巧.
  • 容器可以根据需要加载必需的库、依赖项和文件.
  • 容器可以更好在生产环境进行迁移.

启动容器

使用docker run -option image:tag command命令 command参数来启动一个容器, 如:

docker run -it mysql /bin/echo hello world!

上述命令会启动一个容器并输出


启动容器

option可选列表如下

  • -d 容器在后台以domain模式运行,返回容器id
  • -i 以交互模式运行 通常与 -t一起使用
  • -P 容器内部端口随机映射到主机端口
  • -p 指定端口映射 格式 主机端口:容器端口
  • -t: 为容器重新分配一个伪输入终端m,通常与-i同时使用 -it一起使用可以将当前终端连接到容器终端
  • --name="newname"" 为容器指定一个名称
  • --dns 指定容器DNS,默认与宿主一致
  • --dns-search example.com 指定容器DNS搜索域名,默认和宿主一致
  • -h 指定容器的hostname
  • -e key=value 设置环境变量
  • --env-file=[] 从指定文件读取环境变量
  • --cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行
  • -m 设定容器最大内存
  • --net="bridge" 指定容器的网络连接类型,支持bridge/host/none/container四种类型
  • --link=[] 添加链接到另一个容器
  • --expose=[] 开放一个端口或一组端口
  • --volume,-v 绑定一个卷

与容器交互

使用-it参数可以启动一个伪终端

docker run -it test:v1
-it开启伪终端

容器后台运行

容器会在执行完成command或者退出bash后终止,使用-d参数可以指定容器后台运行,此处用mysql镜像启动一个容器

docker run -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

成功启动后会返回这个容器的id

防止容器退出

docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了.例子

docker run -it --name test1 centos:latest /bin/sh

启动一个名为test1的centos镜像,然后输出exit并回车,然后docker ps -a发现这个容器已经退出

628d9bded677   centos:latest   "/bin/sh"   7 seconds ago   Exited (0) 4 seconds ago             test1

exit命令结束了docker管理的/bin/sh进程,因而无论是否这个容器中有没有其他进程在后台运行,容器都会退出.

换句话说,docker run指定的容器启动时运行的程序结束,那么容器就会退出.

如何避免呢,可以在执行上述命令后,按CTRL+P+Q切出,此时容器并不会退出.

docker run -it --name test1 centos:latest /bin/sh

然后按CTRL+P+Q切出,再查看.

b30c4510a76c   centos:latest   "/bin/sh"   1 minutes ago   Up 1 minutes                         test1

查看容器运行状态

使用docker ps或者docker container ls命令查看运行状态,与linuxps 命令非常相似

ps

这里docker ps的命令包括:

  • -a 列出所有容器
  • -l 列出最新创建容器
  • -n=2 列出最近创建的2个容器
  • -q 仅列出容器ID
  • -s 显示容器大小

如果要查看所有容器,使用docker ps -a

ps -a

查款容器日志

使用docker logs container_id|name命令来查看容器日志.

容器重命名

在创建一个容器的时候,docker后自动对其进行重命名,也可以使用--name来指定,以mysql为例

docker run -e MYSQL_ROOT_PASSWORD=123456 --name mysql_server -d mysql:5.6
--name 重命名容器

登陆到容器

-d指定容器后台运行后,可以使用两种方式登陆到容器.

  • docker attach container_id 不推荐,退出会导致容器停止运行.
  • docker exec 推荐
 docker exec -it mysql_server /bin/bash
exec

检视容器

使用docker inspect container_id|container_name命令来查看检视容器,通常会包含一些非常有用的信息

docker inspect mysql_server
检视容器信息

设置容器端口

启动mysql后,可以使用-p 宿主端口:容器端口参数映射容器端口与宿主机端口,宿主端口和容器端口设置成不一样的只
比如12345:54321表示宿主的12345端口映射到容器的54321端口.

上面已经启动了一个mysql容器,容器中mysql进程监听的是容器的3306端口,由于没有指定端口映射,在宿主机是无法访问容器中的mysql.

如果想要外部访问,启动一个新的mysql容器并绑定到宿主机的3306端口.

docker run -e MYSQL_ROOT_PASSWORD=123456 --name mysql_server_new -p 3306:3306 -d mysql:5.6

设置端口映射

可以使用docker port container_id/name来查看一下容器的端口映射

docker port mysql_server_new

3306/tcp -> 0.0.0.0:3306

还可以使用docker ps,可以看到PORTS显示 3306->3306,测试一下

宿主机连接mysql

注:此处表述有误,无法访问并不是完全无法访问,使用iptable工具映射过去也可以,比较麻烦而已.

关闭容器

使用docker container start/stop/restart container_id来启动或停止一个容器

除此之外,还可以使用docker -kill container_id 来强行停止一个容器

删除容器

使用docker rm container_i来删除一个容器,下面id为226db43edaedab3d300443cd的容器.

delete

导入导出

使用docker export container_id > localfile导出容器快照为本地文件.

docker export mysql_server_new > mysql.tar

使用docker import file/url image_name:tag来将一个容器快照导入为本地快照

docker import mysql.tar mysql_import_test:v1

import

mysql容器的快照被导入成了一个本地镜像.

可以使用docker commit命令将本地容器快照导出为一个本地镜像

docker commit -a "zhangsheng" -m "mysql image" mysql_server_new test_mysql:v11111

commit

commit参数如下

  • -a :提交的镜像作者
  • -c :使用Dockerfile指令来创建镜像
  • -m :提交时的说明文字
  • -p :在commit时,将容器暂停

你可能感兴趣的:(docker容器)