docker下容器怎么执行命令?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker下容器怎么执行命令?相关的知识,希望对你有一定的参考价值。
Docker中我们一般会有两种执行命令的方式,一种是直接进入容器的命令行,在终端执行并查看结果,一种是在后台执行,并不会在终端查看结果。1、进入容器命令行
su root
docker run -i -t ubuntu:16.04/bin/bash#或者执行下面这句docker run -it ubuntu:16.04/bin/bash
-i和-t的作用是帮助你进入交互模式,如果不加这部分,你将无法进入容器内部,更别说使用命令行了。/bin/bash的意思就是使用容器的命令行来输入命令。执行结果如下:
root@7d150a0fb029:/#
root后面跟的就是容器id,表明你已经进入容器,可以输入命令了,你可以输入一些常用命令试试:
root@7d150a0fb029:/# docker run -i -t ubuntu:16.04 /bin/bash
结果输出了镜像的内核版本信息:
Linux version 4.13.0-36-generic (buildd@lgw01-amd64-033)(gcc version 5.4.020160609(Ubuntu5.4.0-6ubuntu1~16.04.9))#40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018
通过exit可退出容器。
2、后台执行命令
输入下面的代码,-d表示的就是后台运行,这点可以直接通过docker run –help查看该命令的功能。下面这句话的意思就是在镜像的程序中添加引号内的代码,并在后台运行。
docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1;done"
输出结果不会显示运行的结果,而是给出新建的容器id,这里说明一下,每次输入docker run命令都会新建一个容器,产生一个新的id。
输出结果如下:
c7188be9bd7b5c0aa91c5eeb72013996c89bfdc2181d1a5ff7f880af6f8aff99
查看一下正在运行的容器:
root@cdl-XPS15R:/home/cdl# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7188be9bd7b ubuntu:16.04"/bin/sh -c 'while t…"13 seconds ago Up11 seconds keen_vaughan1b6ba17f7df7 ubuntu:16.04"/bin/bash"2 minutes ago Exited(0)2 minutes ago cocky_noether7d150a0fb029 ubuntu:16.04"/bin/bash"4 minutes ago Exited(0)2 minutes ago hopeful_banach
这里会发现,第一个容器的id和后台运行的容器id前几位一模一样,但是长度要长很多,其实是一样的,只不过通过ps命令打印输出时为了方便显示只显示了前几位。
如果想要进入后台运行的容器的命令行而不创建新的容器,只需要输入以下命令:
#Exec是进入已经存在的容器,run是创建新容器docker Exec-it c7188be9bd7b /bin/bash
输入哪个更长的id也是一样的效果:
docker Exec -it c7188be9bd7b5c0aa91c5eeb72013996c89bfdc2181d1a5ff7f880af6f8aff99 /bin/bash
输出结果都是:
root@c7188be9bd7b:/# 参考技术A 1,在容器外部,物理机上,可以用docker inspect查看或者,docker inspect container。
2,如果在容器内部。可以用 ps -fe 查看。其中1号进程就是启动命令。
3,Docker会在隔离的容器中运行进程。当运行docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新定义(译者注:docker run可以控制一个容器运行时的行为,它可以覆盖docker build在构建镜像时的一些默认配置),这也是为什么run命令相比于其它命令有如此多的参数的原因。4,命令格式
5,最基本的docker run命令的格式如下:$ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
6,如果需要查看[OPTIONS]的详细使用说明,请参考Docker关于OPTIONS的章节。这里仅简要介绍Run所使用到的参数。OPTIONS总起来说可以分为两类:
设置运行方式:
决定容器的运行方式,前台执行还是后台执行;
设置containerID;
设置网络参数;
设置容器的CPU和内存参数;
设置权限和LXC参数;
设置镜像的默认资源,也就是说用户可以使用该命令来覆盖在镜像构建时的一些默认配置。
7,docker run [OPTIONS]可以让用户完全控制容器的生命周期,并允许用户覆盖执行docker build时所设定的参数,甚至也可以修改本身由Docker所控制的内核级参数。
微服务必学习容器技术Docker系列九~生命周期管理命令
我们前面已经学习了本地容器操作以及版本信息管理,复制提交等容器命令。但是对于怎么启动执行或者操作容器还不是很清楚,今天就来学习下整个容器周期的操作从启动,到停止一整圈的命令掌握。当然还是小步快走,一个一个的尝试学习。
run
run命令是用来创建一个容器并且启动他。
语法糖 docker run [OPTIONS] IMAGE[tag]
OPTIONS[可选的]:在这里列举几个常用的参数,其他参数可以去官网查询
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="test-redis": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID;
-env-file=[]: 从指定文件读入环境变量;
-P : 系统自动的随意指定端口。
-p: 指定端口映射
start/stop/restart
这三个命令式掌握启动,停止,重启的命令。
语法糖就是docker start/stop/restart + docker容器的名字。
列子:
1docker start test-redis
2docker stop test-redis
3docker restart test-redis
4
5docker@ubuntu:~$ docker stop test-redis
6test-redis
7docker@ubuntu:~$ docker ps
8CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9docker@ubuntu:~$ docker start rest-redis
10Error response from daemon: No such container: rest-redis
11Error: failed to start containers: rest-redis
12docker@ubuntu:~$ docker start test-redis
13test-redis
14docker@ubuntu:~$ docker ps
15CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16573f7d98f746 redis "docker-entrypoint.s…" 2 minutes ago Up 11 seconds 6379/tcp test-redis
17docker@ubuntu:~$ docker stop test-redis
18test-redis
19docker@ubuntu:~$ docker ps
20CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21docker@ubuntu:~$ docker restart test-redis
22test-redis
23docker@ubuntu:~$ docker ps
24CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25573f7d98f746 redis "docker-entrypoint.s…" 2 minutes ago Up 2 seconds 6379/tcp test-redis
kill
我们在Linux系统中都知道,会有kill这个命令,同样的在我们容器命令操作里面也有kill相关的命令。
语法糖 docker kill [OPTONS] CONTAINER [容器]
OPTIONS:可选参数项。
--s :向容器发送一个信号,杀死容器的信号
列子:
1docker kill -s KILL test-redis
2docker@ubuntu:~$ docker kill --help
3
4Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...]
5
6Kill one or more running containers
7
8Options:
9 -s, --signal string Signal to send to the container (default "KILL")
10docker@ubuntu:~$ docker kill -s KILL test-redis
11test-redis
12docker@ubuntu:~$ docker ps
13CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
rm
删除一个容器,当我们容器修改命令造成容器不可恢复性错误的时候,一般会把现在的容器删除,当然启动容器的时候要把数据外挂。这样再次启动的时候还会获取到数据。删除的是已经创建的容器,不是我们下载下来的容器镜像
语法糖 docker rm [OPTIONS] CONTAINER [容器名字]
OPTIONS说明:
-f :通过SIGKILL信号强制删除一个运行中的容器
-l :移除容器间的网络连接,而非容器本身
-v :-v 删除与容器关联的卷
1docker rm -f test-redis
2
3docker@ubuntu:~$ docker run -it --name test-redis -d redis
4docker: Error response from daemon: Conflict. The container name "/test-redis" is already in use by container "573f7d98f746465d7498b384f19b5d5a0506f55125e433c30ea3a02060d907c2". You have to remove (or rename) that container to be able to reuse that name.
5See 'docker run --help'.
6docker@ubuntu:~$ docker rm -f test-redis
7test-redis
8docker@ubuntu:~$ docker run -it --name test-redis -d redis
904d57e7380bf130ecaeca455340a9f18e3c40679c299a5f9b12b8842709e4305
10docker@ubuntu:~$ docke ps
11
12Command 'docke' not found, did you mean:
13
14 command 'docky' from deb docky
15 command 'docker' from deb docker.io
16
17Try: sudo apt install <deb name>
18
19docker@ubuntu:~$ docker run -it --name test-redis -d redis
20docker: Error response from daemon: Conflict. The container name "/test-redis" is already in use by container "04d57e7380bf130ecaeca455340a9f18e3c40679c299a5f9b12b8842709e4305". You have to remove (or rename) that container to be able to reuse that name.
21See 'docker run --help'.
语法糖 docker pause [OPTIONS] 容器名字
1docker pause test-redis
2docker unpause test-redis
create
创建一个新的容器但是不启动容器。
语法糖 docker create [options] image [tag]
具体操作语法与run操作一样,可以参考
列子:
1docker create --name test-redis1 redis(存在的镜像文件)
2
3docker@ubuntu:~$ docker create --name test-redis1 redis
4f93712639869006ad3fe1440edb1a5c9570b70e36092d39f2ba94e275bab9db8
5docker@ubuntu:~$ docker ps
6CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
704d57e7380bf redis "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp test-redis
●
●
●
●
●
以上是关于docker下容器怎么执行命令?的主要内容,如果未能解决你的问题,请参考以下文章