生产上的容器启动时应该限定CPU、内存、挂载卷、容器名称。以在不带swap的物理机上启动一个2C4G的mysql容器为例,镜像名称为mysql:v1.1:
docker run -c=0,1 -m=4096M -v /mount_dir/logs:/mnt/logs -v /mount_dir/files:/mnt/files --net=none --name vip -d mysql:v1.1
参数说明:
-c=0,1该参数设置容器使用的cpu核,这里必须指定cpu核的编号,而不能简单的指定个数。
-m=4096M 该参数设置容器的最大使用内存,因为是用OOM机制实现,一旦超过该内存,容器会被暂停。
-v /mount_dir/logs:/mnt/logs 该参数设置容器的volume映射,所有容器中对目录/mnt/logs的读写操作都会转化为对宿主机上目录/mount_dir/logs目录的操作。这是容器实现持久化的推荐方案。
--net=none 设置网络模式为none。因为要手动创建vlan网络,因此容器启动时,是需要一个回环设备lo。
--name vip设置容器的名称为vip。若不指定,则会有一个随机名称。
-d mysql:v1.1 该参数说明以后台方式启动容器。生产中所有的容器都应使用该方式启动。-d后面跟着的mysql:v1.1是镜像的名称。
查看宿主机拥有哪些镜像:
docker images;
查看正在运行着的容器:
docker ps;
查看所有容器:
docker ps –a;
进入到容器中有两种方式:
1. docker attach $container
该命令只适用于那些容器的启动命令是/bin/bash的,否则attach进容器后什么都做不了;
2. docker exec --it $container /bin/bash
该命令适用于所有容器,通过在容器中另外执行/bin/bash命令,并获取标准输入输出,和容器内部进行交互。但是该命令执行的命令不会被容器记录。
docker top $container;
该命令可以将容器中的标准输出、标准错误输出全部打印出来。凡是容器进程在标准输出和标准错误输出上的历史记录都会被打印。
docker logs $container;
停止容器:
docker stop $container;
删除容器:
docker rm $container;
删除容器的前提必须是容器已经停止,否则强行删除运行中的容器执行如下命令:
docker rm -f $container;
容器是动态的,一旦被删除就不会有任何记录留下。如果需要对容器进行保存,就需要将容器固化成镜像,采用如下命令:
docker commit $container $image;
例如:将容器test保存为hongyang/test:1.0.0
docker commit test hongyang/test:1.0.0;
有时候,需要把镜像制作成tar包以方便传输,或者把tar包装在成镜像:
docker save $image > $image.tar;
例如,保存mysql镜像:
docker save mysql:latest > /tmp/mysql.tar
装载镜像:
docker load < $image.tar;
docker rmi $image;
Docker支持在宿主机和容器之间相互拷贝文件:
将物理机上文件(以/tmp/test为例)拷贝到容器中:
docker cp /tmp/test $container:/tmp/ ;
将容器中的文件拷出:
docker cp $container:/tmp/test /tmp/ ;