docker之容器管理篇

一、创建容器常用选项

1.1常用选项如下表:

选项 描述

-i, --interactive   交互式
-t, --tty   分配一个伪终端
-d, --detach    运行容器到后台
-e, --env   设置环境变量
-p, --publish list  发布容器端口到主机
-P, --publish-all   发布容器所有EXPOSE的端口到宿主机随机端口
--name string   指定容器名称
-h, --hostname  设置容器主机名
--ip string 指定容器IP,只能用于自定义网络
--network   连接容器到一个网络
--mount mount   将文件系统附加到容器
-v, --volume list   绑定挂载一个卷
--restart string    容器退出时重启策略,默认no

1.2实例演示:

创建nginx容器:

[[email protected] ~]# docker container run -d nginx
Unable to find image ‘nginx:latest‘ locally
latest: Pulling from library/nginx
be8881be8156: Pull complete
32d9726baeef: Pull complete
87e5e6f71297: Pull complete
Digest: sha256:6ae5dd1664d46b98257382fd91b50e332da989059482e2944aaa41ae6cf8043a
Status: Downloaded newer image for nginx:latest
e7155844c2a27d9a9beb52307fba95c63fbaeec4aa8adaecc8e30c6968209e9c

列出当前正在运行的容器:

[[email protected] ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
e7155844c2a2        nginx               "nginx -g ‘daemon of…"   4 minutes ago       Up 4 minutes        80/tcp              priceless_jones

字段说明:

CONTAINER ID - 随机生成的容器ID
IMAGE - 基于哪个镜像创建的
COMMAND - 启动容器运行的命令
CREATED - 创建时间
STATUS - 运行状态

列出所有容器,包括已停止的:
[[email protected] ~]# docker container ls -a

指定容器名称、主机名和设置环境变量:

[[email protected] ~]# docker container run -d --name nginx01 -e TEST=123 -h nginx01 nginx
dd29208fbfd70eec6797d523a4ef8436ebd6f6818d89c139a949f15fafabc38c
[[email protected] ~]#
[[email protected] ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
dd29208fbfd7        nginx               "nginx -g ‘daemon of…"   13 seconds ago      Up 12 seconds       80/tcp              nginx01
e7155844c2a2        nginx               "nginx -g ‘daemon of…"   8 minutes ago       Up 8 minutes        80/tcp              priceless_jones
[[email protected] ~]# 

[[email protected] ~]# docker container exec -it nginx01 bash
[email protected]:/#
[email protected]:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[email protected]:/# echo $TEST
123

容器创建了,怎么让用户访问呢?那就用到-p选项了,从宿主机暴露一个端口到容器:

[[email protected] ~]# docker container run -d --name nginx02 -p 88:80 nginx
a5e10362acc39efcdd8d3dccdca0b8ae8dd1bb824c259a3ebada70ec73b8b6e4
[[email protected] ~]# 

[[email protected] ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
a5e10362acc3        nginx               "nginx -g ‘daemon of…"   18 seconds ago      Up 17 seconds       0.0.0.0:88->80/tcp   nginx02
dd29208fbfd7        nginx               "nginx -g ‘daemon of…"   4 minutes ago       Up 4 minutes        80/tcp               nginx01
e7155844c2a2        nginx               "nginx -g ‘daemon of…"   12 minutes ago      Up 12 minutes       80/tcp               priceless_jones
[[email protected] ~]# 

此时多个一个PORTS字段,代表宿主机监听0.0.0.0的88端口,转发到该容器80端口。
打开浏览器输入:http://宿主机IP:88

下面设置允许容器nginx03最多使用50M内存和30M的SWAP,并禁用OOM Killer

[[email protected] ~]# docker container run -d --name nginx03 --memory="50m" --memory-swap="80m" --oom-kill-disable nginx
8cb80b28450d05e1e3cd5437b73bb791daa6603412961fb6da55b78f66d69ad7
[[email protected] ~]# 

开启,关闭,重启,删除容器:

[[email protected] ~]# docker container stop  nginx03
停止容器nginx03
[[email protected] ~]# docker container start  nginx03
重启容器
[[email protected] ~]# docker container restart  nginx03

删除一个容器:
[[email protected] ~]# docker container rm nginx03
Error response from daemon: You cannot remove a running container 8cb80b28450d05e1e3cd5437b73bb791daa6603412961fb6da55b78f66d69ad7. Stop the container before attempting removal or force remove
[[email protected] ~]# 

[[email protected] ~]# docker  stop nginx03
nginx03
[[email protected] ~]# docker container rm nginx03
nginx03

使用 docker stats 查看当前容器内存限制及使用:

[[email protected] ~]# docker stats --no-stream nginx03
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
8cb80b28450d        nginx03             0.00%               3.98MiB / 50MiB     7.96%               648B / 0B           0B / 0B             0
[[email protected] ~]#
[[email protected] ~]# docker stats nginx02

查看nginx02容器的实时的内存,网络I/O CPU, 磁盘IO的使用情况
CPU限额:
允许容器最多可以使用一个半的CPU:

docker container run -d --name nginx01 --cpus=".5"  --memory="50m" --memory-swap="80m" --oom-kill-disable nginx

建议:设置-memory再禁用OOM Killer,CPU使用不超过50%。

2、管理应用程序数据

前面讲到过容器删除,容器里产生的数据也会删除,并且在容器里操作是在可写层,会经过存储驱动管理,这种额外的抽象会降低性能。
容器的可写层存储数据,有一些缺点:

A、当容器停止运行时,数据将不会持续存在,如果另一个进程需要这些数据,则很难将数据从容器中取出。并且容器删除后,数据也会随着删除。
B、容器的可写层与容器运行的宿主机紧密耦合,无法轻松地将数据移动到其他地方。
C、容器的可写层需要存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供的联合文件系统,与直接在宿主机上写入文件相比,这种额外的抽象会降低性能。
Docker提供三种方式将数据从宿主机挂载到容器中:
D、volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
E、bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
F、 tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。

2.1 volumes

特点:
A、多个运行容器之间共享数据。
B、当容器停止或被移除时,该卷依然存在。
C、多个容器可以同时挂载相同的卷。
D、当明确删除卷时,卷才会被删除。

管理卷:

[[email protected] ~]# docker volume create nginx-vol
nginx-vol

[[email protected] ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx-vol
[[email protected] ~]# docker volume inspect nginx-vol
[
    {
        "CreatedAt": "2018-08-05T05:05:51+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
        "Name": "nginx-vol",
        "Options": {},
        "Scope": "local"
    }
]

[[email protected] ~]# cd /var/lib/docker/volumes/nginx-vol/_data
[[email protected] _data]# ls

运行一个容器使用上面创建的卷:

[[email protected] _data]# docker container run -d --name=nginx-vol --mount source=nginx-vol,destination=/usr/share/nginx/html nginx
7587ed948f95eb885a2bd5e2739da2d7e767e0efed01d9c69685ce4b83521c7b

[[email protected] _data]#  ls /var/lib/docker/volumes/nginx-vol/_data
50x.html  index.html

[[email protected] _data]# docker container exec -it nginx-vol bash
[email protected]:/#
[email protected]:/# cd /usr/share/nginx/html
[email protected]:/usr/share/nginx/html# ls
50x.html  index.html
[email protected]:/usr/share/nginx/html# pwd
/usr/share/nginx/html

可以看到容器中的数据已经存储到了nginx-vol数据卷中:
注:-v选项在早期Docker版本已经支持,而--mount是在17 CE版本后才引入的选项,初学者建议使用--mount。

清理:

[[email protected] _data]# docker container stop nginx-vol
nginx-vol
[[email protected] _data]# docker container rm nginx-vol
nginx-vol
[[email protected] _data]# docker volume rm nginx-vol
nginx-vol
[[email protected] _data]# docker volume ls
DRIVER              VOLUME NAME

原文地址:http://blog.51cto.com/wujianwei/2155475

时间: 2024-10-12 23:06:19

docker之容器管理篇的相关文章

Docker的容器

容器是一个打包了应用和服务的环境,是一个轻量级的虚拟机,每一个容器都由一组特定的应用和必要的依赖库组成. 容器的管理操作 容器常见的命令:查看.创建.启动.终止和删除 创建容器 docker create docker run 二者的区别在于docker create创建的容器处于停止状态,docker run 创建的容器处于启动状态 用docker create创建一个停止状态的容器 [[email protected] ~]# docker create centos:6.7 Unable

理解Docker单机容器网络

在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通过宿主机的P端口访问,就像直接访问Docker容器网络内部容器提供的服务一样. Docker针对端口映射前后有两种方案,一种是1.7版本之前docker-proxy+iptables DNAT 的方式:另一种则是1.7版本(及之后)提供的完全由iptables DNAT实现的端口映射.不过在目前do

docker迁移容器

Docker中容器的备份.恢复和迁移1. 备份容器首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命令 # docker ps 在此之后,我们要选择我们想要备份的容器,然后去创建该容器的快照.我们可以使用 docker commit 命令来创建快照. # docker commit -p 30b8f18f20b4 container-backup 该命令会生成一个

docker进入容器的方式

通过docker创建守护运行(在使用-d参数时)的容器时,容器启动后会进入后台.用户无法看到容器中的信息.某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令.docker exec命令,以及nsenter工具等. attach命令 docker attach 容器名称/ID 在使用attach命令有时候并不方便.当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示.当某个窗口因命令阻塞时,其他窗口也无法执行操作了. exec命令 docker ex

FW Docker为容器分配指定物理网段的静态IP

官方有关于网桥和IP配置的文档地址:https://docs.docker.com/articles/networking/ 1.宿主机(系统采用ubuntu-14.04.1-server-amd64)的网络采用桥接模式(默认是DHCP模式,还有一种模式就是静态IP),网桥的网段与物理网段相同.目前的物理网段为192.168.5.1/24,网关是192.168.1.1,物理网卡设备为eth0编辑配置文件/etc/network/interfaces,自定义网桥br0 [email protect

Docker基础-容器操作

1.创建容器 1.新建容器 可以使用docker create命令新建一个容器. [[email protected] ~]# docker create -it ubuntu:latest ffc9099be315f1b94876410c7d74dcd20e311e735e638080dd477534c063a6d6 [[email protected]-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

docker --Docker微容器Alpine Linux

Alpine Linux的官网: http://www.alpinelinux.org/    #官方 https://pkgs.alpinelinux.org/packages  #官方提供的安装包查询 使用Docker创建容器时,基础镜像通常选择Ubuntu或Centos,不管哪个镜像的大小都在100MB以上. Alpine Linux是一个面向安全的轻型的Linux发行版. Alpine Linux采用了 musl libc 和 busybox以减小系统的体积和运行时资源消耗. 在保持瘦身

docker mysql 容器安装笔记

Basic Steps for MySQL Server Deployment with Docker 1 查找适合的mysql镜像,选择合适的版本 docker search -f stars=3 -f is-official=true mysql--查找tag为mysql,stars大于3官方镜像 2 下载 docker pull mysql:5.7 3 运行 (1)docker run -d --name mysql01 mysql:5.7 说明 此处通过查看日志(docker logs

docker启动容器报"iptables No chain/target/match"

Centos 7 docker 启动grafana容器报"iptables No chain/target/match by that name" docker run -d -p 3000:3000  grafana/grafana:5.1.0   Error response from daemon: Cannot start container 565c06efde6cd4411e2596ef3d726817c58dd777bc5fd13762e0c34d86076b9e: ip