欲知前情如何请看:
docker-01
docker-02
docker-03
docker-04
docker-05
docker-06
今天继续介绍关于镜像的命令
一.进入正在运行的容器并以命令交互
我们继续第六章的内容展开,我们在第六章的已经运行了一些镜像或者容器
我们可以输入
代码语言:javascript复制docker ps
可以看到返回值:
代码语言:javascript复制[root@happy2022 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5011826fe018 redis:6.0.8 "docker-entrypoint.s…" 17 hours ago Up 17 hours 6379/tcp focused_morse
ecca3c058a18 redis:6.0.8 "docker-entrypoint.s…" 21 hours ago Up 21 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp serene_shockley
c34bf70a31a6 ubuntu "bash" 38 hours ago Up 38 hours sharp_hamilton
我们可以看到还有三个容器还在运行
那我现在想进去Ubuntu这个容器里,该如何进入呢?
这就是我们今天这条指令的用处
代码语言:javascript复制docker exec -it 容器ID bashshell
例如我想进入Ubuntu系统
就可以输入:
代码语言:javascript复制 docker exec -it c34bf70a31a6 bash
结果如下:
这样我们就成功的进入了Ubuntu容器内部
我们还可以看一下exec的帮助手册
我们输入
代码语言:javascript复制docker exec --help
结果如下
代码语言:javascript复制Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
-w, --workdir string Working directory inside the container
我们上面那两条指令的意思就是交互式
还有一个命令也可以进入容器内部
代码语言:javascript复制docker attach 容器id
我们可以看一下attach的帮助手册
代码语言:javascript复制Usage: docker attach [OPTIONS] CONTAINER
Attach local standard input, output, and error streams to a running container
Options:
--detach-keys string Override the key sequence for detaching a container
--no-stdin Do not attach STDIN
--sig-proxy Proxy all received signals to the process (default true)
attach指令 VS exec指令
1.attach 直接进入容器启动命令的终端,不会启动新的进程
用exit退出,会导致容器的停止。
2.exec是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致新容器的停止
所以这样一比较的话推荐使用docker exec命令,因为退出容器终端,不会导致容器的停止
二.从容器内拷贝文件至主机上
这条命令我们最近用的很少 ,简单介绍一下,后期用到我们会继续讲解
容器 -> 主机
代码语言:javascript复制docker cp 容器id:容器内路径 目的主机路径
代码语言:javascript复制root@c34bf70a31a6:/# touch 1.txt
root@c34bf70a31a6:/# pwd
/
root@c34bf70a31a6:/# exit
exit
[root@happy2022 ~]# docker cp c34bf70a31a6:/1.txt /1.txt
[root@happy2022 ~]# ls
anaconda-ks.cfg
[root@happy2022 ~]# docker cp c34bf70a31a6:/1.txt /
[root@happy2022 ~]# ls
anaconda-ks.cfg
[root@happy2022 ~]# pwd
/root
[root@happy2022 ~]# cd ..
[root@happy2022 /]# ls
1.txt bin boot dev etc home lib lib64 lost found media mnt opt proc root run sbin srv sys tmp usr var
[root@happy2022 /]#
通过上述指令可以看到 1.txt已经拷贝至我们的根目录下
我们可以看一下cp的帮助手册
代码语言:javascript复制docker cp --help
代码语言:javascript复制Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Copy files/folders between a container and the local filesystem
Use '-' as the source to read a tar archive from stdin
and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of a
container source to stdout.
Options:
-a, --archive Archive mode (copy all uid/gid information)
-L, --follow-link Always follow symbol link in SRC_PATH
也就是两个参数
三.导出和导入容器
这两个指令我们目前也用的比较少,等我们日后用的时候会再细细的讲一下
导出
代码语言:javascript复制docker export 容器id > 文件名.tar
导入
代码语言:javascript复制cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号
今天的分享就到此结束了
下次见!