Docker 容器
运行容器
新建并启动容器
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.17.0
- -p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口;
- –name:指定容器名称,之后可以通过容器名称来操作容器;
- -e:设置容器的环境变量,这里设置的是时区;
- -v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;
- -d:表示容器以后台方式运行。
- – link 容器互连
- –restart =always 容器启动策略
创建容器
docker create
启动容器
docker start $ContainerName
重启容器
docker restart $ContainerName
列出容器
- 列出运行中的容器:
$ docker ps
- 列出所有容器:
$ docker ps -a
停止容器
注意:$ContainerName
表示容器名称,$ContainerId
表示容器ID,可以使用容器名称的命令,基本也支持使用容器ID,比如下面的停止容器命令。
$ docker stop $ContainerName(or $ContainerId)
例如:
$ docker stop nginx
#或者
$ docker stop c5f5d5125
强制停止容器
$ docker kill $ContainerName
删除容器
- 删除指定容器
docker rm $ContainerName
- 按名称通配符删除容器,比如删除以名称
mall-
开头的容器
docker rm `docker ps -a | grep mall-* | awk '{print $1}'`
- 强制删除所有容器
docker rm -f $(docker ps -a -q)
同步宿主机时间到容器
docker cp /etc/localtime $ContainerName:/etc/
报错****解决方法:
docker cp /usr/share/zoneinfo/Asia/Shanghai 2c87bcc41378:/etc/localtime
查看容器状况
资源情况
- 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:
docker stats $ContainerName
- 查看所有容器资源占用情况:
docker stats -a
- 容器进程
docker top name
- 查看容器磁盘使用情况
docker system df
- 查看所有网络
docker network ls
查看容器的日志
- 查看容器产生的全部日志:
docker logs $ContainerName
- 动态查看容器产生的日志:
docker logs -f $ContainerName
查看容器的IP地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName
导入和导出容器
docker export -o name.tar name
docker import name.tar - test/tag 导入命令变成镜像
进入容器
docker exec -it $ContainerName /bin/bash
文件复制
复制容器内容到外部
docker container cp nginx:/etc/nginx /mydata/nginx/
复制外部内容到容器内
docker cp /mydata/nginx/ nginx:/etc/nginx
日志配置
设置日志文件最大容量、最大日志文件数
docker run ...... --log-opt max-size=10m --log-opt max-file=1
也可以在docker的配置文件中进行全局修改:新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数
{
"log-driver":"json-file",
"log-opts": {"max-size":"10m", "max-file":"1"}
}
create <container>,只创建一个容器,处于created状态,未start
资源限制
内存
与操作系统类似,容器可使用的内存包括两部分:物理内存和swap
-m或者--memory:设置内存的使用限额
--memory-swap:设置内存+swap的使用限额
docker run -it -m 200M --memory-swap=300M ubuntu
如果只有 -m 没有 --memory-swap,这后者默认为前者的两倍
使用progrium/stress镜像来测试,该镜像可用于对容器执行压力测试
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
--vm 1:启动1个内存工作线程
--vm-bytes 280M:每个线程分配280M内存
CPU限额
-c 或者 --cpu-shares,设定权重,不设定的话默认值为1024
docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu
当争抢CPU时,则A能抢到B的两倍。不争抢都是正常跑满
docker run --name container_A -it -c 1024 progrium/stress --cpu 1
docker run --name container_B -it -c 1024 progrium/stress --cpu 1
--cpu 1 用来设置工作线程数量,只有1个cpu的话,1个工作线程就能将CPU压满
此时,A分得66的cpu资源,B只有33。如果关掉A,则全部分给B。
更新容器
- 将容器启动方式修改为always
docker container update --restart=always $ContainerName
- 在容器启动时设置退出时总是重启容器
docker run -d --restart=always
Docker 仓库
Docker Hub
目前 Docker 官方维护了一个公共仓库 Docker Hub。
大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
注册
在 https://hub.docker.com 免费注册一个 Docker 账号。
登录和退出
登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。
$ docker login
退出
退出 docker hub 可以使用以下命令:
$ docker logout
拉取镜像
你可以通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。
以 ubuntu 为关键词进行搜索:
$ docker search ubuntu
使用 docker pull 将官方 ubuntu 镜像下载到本地:
$ docker pull ubuntu
推送镜像
用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。
以下命令中的 username 请替换为你的 Docker 账号用户名。
$ docker tag ubuntu:18.04 username/ubuntu:18.04
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED ...
ubuntu 18.04 275d79972a86 6 days ago ...
username/ubuntu 18.04 275d79972a86 6 days ago ...
$ docker push username/ubuntu:18.04
$ docker search username/ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
username/ubuntu