Docker容器基本操作(一)

容器是由镜像实例化而来的。

查看本地容器进程

# 列出本地正在运行的容器进程
docker ps
# 列出本地所有状态的容器进程
docker ps -a

在这里插入图片描述

可以查看到之前通过“hello-world”镜像运行的容器信息,当前状态是退出的(在23小时之前就退出了,因为这个镜像容器运行时只做了一个流的输出,然后就结束了),这个容器的启动命令是“/hello",名称是"jovial_rubin"(这个在没有指定时,是系统随机产生的)。再运行一个hello-worle(docker run hello-world)容器,就可以查看到两个已经退出的容器。
在这里插入图片描述
标记出的内容一个是容器ID一个是镜像,镜像都是hello-world(即:docker.io/library/hello-world:latest).

启动容器

启动命令格式:详细

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
# []中都是可选项

OPTIONS:

  1. -i:表示启动一个可交换式的容器,并持续打开标准输出
  2. -t:表示使用当前终端关联到容器的标准输入输出上
  3. -d:表示容器放置到后台运行
  4. –rm:退出后即删除容器(前面两个杠)
  5. –name:表示定义容器唯一名称(前面两个杠)

IMAGE:表示利用哪个镜像实例化容器
COMMAND:启动容器时要执行的命令
ARG:表示COMMAND的参数

交互式运行一个容器
# docker run -it  adminhubo/alpine:latest /bin/sh
docker run -i -t  adminhubo/alpine:latest /bin/sh

启动后会进入到容器的交互式程序,可以在里面执行命令产看容器中的目录结构,IP地址等信息:
Docker容器基本操作(一)_第1张图片
再连接一个当前机器的终端查看现在的容器进程:
在这里插入图片描述
可以看到一个通过adminhubo/alpine:latest镜像创建的容器处于UP状态。通过exit退出交互式终端,容器也将变成退出状态。
Docker容器基本操作(一)_第2张图片

非交互式运行一个容器
# docker run IMAGE
# 这里添加一些参数,让容器启动时执行echo命令输出,执行完成后退出,退出后就删除容器
docker run --rm adminhubo/alpine:latest /bin/echo hello

运行容器时不会出现交互式终端,并且会输出hello,查看容器也找不到刚启动的容器:
Docker容器基本操作(一)_第3张图片

后台运行一个容器
# docker run -d IMAGE
# 这里添加了--name选项,给容器起了一个名称;加了一个sleep命令让容器运行300秒
docker run -d --name myAlpine adminhubo/alpine:latest /bin/sleep 300

后台运行一个容器时,docker守护进程再启动容器时会返回一个容器标识:
在这里插入图片描述
docker有三种容器标识,可以再官网产看到:
Docker容器基本操作(一)_第4张图片

在宿主机上查看容器进程
# 查看刚才执行 /bin/sleep 300 命令的容器在宿主机上对应的进程
# 如果没有查到,可能是容器已经运行300秒退出了(可以用后面的命令运行退出的容器)
ps aux | grep sleep | grep -v grep
进入容器
# 通过exec(execute)进入一个UP状态的容器
# docker exec -ti CONTAINER_ID /bin/sh
docker exec -ti 606cf5a247a2 bin/sh

进入容器后可以用ps查看进程,第一个就是容器运行时执行的进程
Docker容器基本操作(一)_第5张图片

终止、运行、重启一个存在的容器
# 显示的停止一个容器
# docker stop CONTAINER_ID/CONTAINER_NAME
docker stop 606cf5a247a2
# 运行一个存在的容器
# docker start CONTAINER_ID/CONTAINER_NAME
docker start 606cf5a247a2
# 重启一个存在的UP状态的容器
# docker start CONTAINER_ID/CONTAINER_NAME
docker restart 606cf5a247a2

Docker容器基本操作(一)_第6张图片

删除一个存在的容器
# docker rm CONTAINER_ID/CONTAINER_NAME

只能删除退出的容器,如果要删除正在运行的容器需要加-f
Docker容器基本操作(一)_第7张图片
删除UP状态的容器时,提示:在删除或者强行删除运行中的容器要先停止它,所以最好不要用 -f 直接删除一个running的容器。

# 循环删除已经停止的容器
for i in `docker ps -a|grep -i exit|awk '{print $1}'`;do docker rm $i;done

在这里插入图片描述

在容器中修改,并固化到镜像中
# docker commit -p CONTAINER_NAME NEW_IMAGE_FALLNAME
# 之前的步骤删除了所有容器,现在重新运行一个,然后让他运行十分钟之后再退出
docker run -d --name myAlpine adminhubo/alpine:latest /bin/sleep 600
# 进入容器,新增一个hello.txt文件,文件中写入一些字符
docker exec -it myAlpine /bin/sh

Docker容器基本操作(一)_第8张图片

等容器退出运行(或者重启容器)之后再次启动这个容器, hello.txt 文件依然存在,但是如果通过镜像重新运行一个实例,那么不会有这个文件。
Docker容器基本操作(一)_第9张图片
这表示,对容器镜像修改时写个了容器的可写层,二镜像时只读的,对容器的写不会改变镜像。

# 将对容器的修改固化到镜像中
# docker commit -p CONTAINER_ID/CONTAINER_NAME NEW_IMAGE_FALLNAME
docker commit -p myAlpine myAlpine adminhubo/alpine:latest_with_hello

Docker容器基本操作(一)_第10张图片

将新的镜像可以push到仓库管理。

导入导出镜像
# 导出镜像
# docker save IMAGEID > SAVE_NAME
docker save 9bb5adfd5fd9 > myAlpine-v-with-hello.tar

Docker容器基本操作(一)_第11张图片

# 导入镜像,把之前的删掉重新导入
# docker load < SAVE_NAME
docker rmi -f 9bb5adfd5fd9
# 通过刚才保存的镜像导入
docker load < myAlpine-v-with-hello.tar
# 导入的镜像没有名称以及tag,需要通过命令指定
docker tag 9bb5adfd5fd9 adminhubo/alpine:latest_with_hello_load

Docker容器基本操作(一)_第12张图片

可以把导出的文件分发给其他人,方便部署

查看容器日志
# docker logs CONTAINER_ID/CONTAINER_NAME
# 运行启动一个hello-world容器,但是不把日志打印到终端,而是重定向到/dev/null(黑洞),就是不显示输出日志
docker run hello-world 2>&1 >> /dev/null
# 利用logs产看日志
docker logs 678dfc6f6c61

Docker容器基本操作(一)_第13张图片

docker logs -f {容器ID} 可以实时输出日志,类似tail -f 命令

你可能感兴趣的:(docker学习,docker)