2.管理容器
#Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
#容器就是被封装起来的进程操作,只不过现在的进程可以简单也可以复杂,复杂的话可以运行1个操作系统.简单的话可以运行1个回显字符串.
#容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下.
###查看容器:显示容器列表
docker PS 显示正在运行的容器|| docker ps -a 显示包括运行过的容器
###创建容器:
docker create [-i || -t || --name 容器名称] 依赖的镜像名称 [COMMENT] [ARG](容器启动后在容器中执行的命令及参数)
eg:
docker create -it --name ubuntu-1 ubuntu ls -a
-t, --tty 分配一个伪TTY,也就是分配虚拟终端
-i, --interactive 即使没有连接,也要保持STDIN打开
--name 为容器起名,如果没有指定将会随机产生一个名称
启动容器的三种方式
#### 启动创建好的容器:将一个或多个处于创建状态或关闭状态的容器启动起来
#命令格式:
docker start [-a || -i] 容器名称 或 容器ID
#命令参数(OPTIONS):
-a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上
-i, --interactive 将当前shell的 STDIN连接到容器上
eg:
docker start -a ubuntu-1
#### 创建新容器并启动:
#作用:
利用镜像创建并启动一个容器
#命令格式:
docker run [命令参数] 镜像名称 [执行的命令]
命令参数(OPTIONS):
-t, --tty 分配一个伪TTY,也就是分配虚拟终端
-i, --interactive 即使没有连接,也要保持STDIN打开
--name 为容器起名,如果没有指定将会随机产生一个名称
-d, --detach 在后台运行容器并打印出容器ID
--rm 当容器退出运行后,自动删除容器
#启动一个镜像输出内容并删除容器
$ docker run --rm --name nginx1 nginx /bin/echo "hello docker"
#注意:
docker run 其实 是两个命令的集合体 docker create + docker start
#### 守护进程方式启动容器<常用的方式>
更多的时候,需要让Docker容器在后台以守护形式运行。此时可以通过添加-d参数来实现
#命令格式:
docker run -d [--name 容器名称] image_name [command ]...
#守护进程方式启动容器:
:~$ docker run -d nginx
### 暂停与取消暂停与重启
暂停:docker pause 容器名称 或 容器ID
eg:docker pause a229eabf1f32
取消暂停:
docker unpause 容器名称 或 容器ID
eg:docker unpause a229eabf1f32
###重启容器
#重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
docker restart 容器名称 或 容器ID
eg:docker restart -t 20 a229eabf1f32 //-t, --time int 重启前,等待的时间,单位秒(默认 10s)
###关闭容器
docker stop 容器名称 或 容器ID
docker kill 容器名称 或 容器ID
###删除容器
#正常删除 -- 删除已关闭的
docker rm [-f] 容器名称 或 容器ID
#强制删除 -- 删除正在运行的
docker rm -f [容器名称]或[容器ID]
#强制批量删除 -- 删除全部的容器
docker rm -f $(docker ps -a -q)
###创建并进入容器
docker run -it --name 容器名称 镜像名称 /bin/bash
eg:docker run -it --name panda-nginx nginx /bin/bash
#--name:给容器定义一个名称
#-i:则让容器的标准输入保持打开。
#-t:让docker分配一个伪终端,并绑定到容器的标准输入上
#/bin/bash:执行一个命令
###退出容器:exit 或者 ctrl+D
###手动进入容器:
docker exec -it 容器id /bin/bash
#效果演示:
$ docker exec -it d74fff341687 /bin/bash
###脚本进入容器
#!/bin/bash
#定义进入仓库函数
docker_in(){
NAME_ID=$1
PID=$(docker inspect --format {{.State.Pid}} $NAME_ID)
nsenter --target $PID --mount --uts --ipc --net --pid
}
docker_in $1
./docker_in.sh b3fbcba852fd
###基于容器创建镜像
docker commit -m '改动信息' -a "作者信息" container_id new_image:tag
eg:docker commit -m 'mkdir /hello /world ' -a "panda" d74fff341687 nginx:v0.2
docker export [容器id] > 模板文件名.tar
eg:docker export ae63ab299a84 > nginx.tar
导入镜像eg:cat nginx.tar | docker import - panda-test
###查看日志信息
docker logs [容器id]
###查看容器详细信息
docker inspect [容器id]
###查看容器端口信息
docker port [容器id]
###容器重命名
docker rename [容器id]或[容器名称] [容器新名称]