如何使用docker运行命令

时间:2020-03-05 15:25:15  来源:igfitidea点击:

Docker Run命令用于启动和运行容器。
学习如何使用"docker运行"命令是任何想要熟悉Docker的开发人员的建议。

使用Docker时,软件开发人员主要使用"docker运行"命令:

  • 从给定的Docker图像创建一个容器
  • 使用可选名称运行一个容器
  • 在前台运行一个容器
  • 以独立式模式运行一个容器
  • 以交互模式运行一个容器
  • 将容器端口发布到主机
  • 在容器和主机之间共享数据
  • 一旦停止,删除容器

Docker运行命令

命令的语法:

docker run [options] image-name [command] [arg...]

要运行Docker容器,我们可以简单地运行以下命令,假设我们已安装Docker:

docker run image-name

其中:

图像名称可以是本地计算机上的Docker镜像,也可能从未从线注册表中拉出,例如Docker Hub和Quay。
IO。

在以下示例中,我们将从公共图像'Hello-World'运行一个容器,位于Docker Hub上。

$sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

第一次运行容器时,Docker守护程序将从Docker集线器中拉动图像"Hello-World"。
然后,它从该图像创建一个新的容器,并将输出流传输到终端。
从现在开始,将图像下载到本地计算机。
我们可以通过运行列出所有Docker图像:

$sudo docker image ls

输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              4e2eef94cd6b        9 days ago          73.9MB
nginx               latest              4bb46517cac3        2 weeks ago         133MB
alpine              latest              a24bb4013296        3 months ago        5.57MB
truongnh1992/go     latest              57b4af3567ac        3 months ago        7.41MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB

下次运行该图像时,它比第一个图像快,我们可以使用图像ID而不是图像名称。
例如:

$sudo docker run bf756fb1ae65
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

注意:从Docker版本1. 13,由于其发布的新语法,我们使用"Docker Container Run"而不是"Docker Run"。

建议使用sudo或者其他解决方法前言docker运行命令,而无需sudo。

使用定义的名称运行一个容器

当我们使用基本语法的"Docker Container运行"的Container时,Docker将为每个容器随机生成名称,如下图所示:

$sudo docker container ls -a

输出:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
941b67537bbb        ubuntu              "/bin/bash"         4 seconds ago        Exited (0) 3 seconds ago                            musing_elgamal
a7b197b56d2c        bf756fb1ae65        "/hello"            About a minute ago   Exited (0) About a minute ago                       determined_faraday
0b40e331161e        hello-world         "/hello"            4 minutes ago        Exited (0) 4 minutes ago                            nervous_sammet

如果要显式为容器分配名称,请使用以下语法运行命令:

$docker container run --name container-name image-name

例如:

$sudo docker container run --name hello-theitroad hello-world

输出:

$sudo docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
eb2f0c9cc658        hello-world         "/hello"            21 seconds ago      Exited (0) 20 seconds ago                       hello-theitroad
...

在前台运行一个容器

当我们使用Docker容器时,有两种运行它们的模式:添加模式和分离模式。

默认情况下,Docker在前台运行容器。
它意味着容器过程添加到终端会话并显示输出。
如果容器仍在运行,则不会返回命令提示符。

例如:

$sudo docker container run nginx
/docker-entrypoint.sh: /docker-entrypoint.d/is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

以独立式模式运行一个容器

如果要在后台进程(分离模式)中运行该容器,请使用"-d""选项:

$sudo docker container run -d nginx
4fd8f2933eafaebcc75ef4fe6d0a961f76d8fdbf64383caff7f422a25c60951f

以交互模式运行一个容器

Docker支持在交互模式下运行容器。
由于此功能,我们可以使用shell在容器中执行命令。

使用'/bin/bash'或者'/bin/sh'的whied west-it选项以启动交互式模式,例如:

$sudo docker container run -it ubuntu /bin/bash
root@d99e70bff763:/# echo 
$sudo docker container run -it ubuntu /bin/sh
# echo 
$dock container run -p host-port:container-port image
/bin/sh
/bin/bash
$sudo docker container run -d -p 8080:80 nginx
cd85a291dab1ff92fa2ee6275446f758baa8322de2b706f7b581a54825142c5b

端口转发容器

默认情况下,为了访问在容器中运行的进程,我们必须进入它。
如果要从外部访问它,请打开一个端口。
通过发布端口,我们可以使用-p选项将容器端口映射到主机上的端口,如下所示:

$curl localhost:8080

例如,将Container Nginx的端口80映射到主机上的端口8080,运行:

$docker container run -v host-machine-location:container-storage image

现在,让我们使用'curl'检索来自localhost的内容:8080

$mkdir share-data/
$echo "Hello theitroad readers" > share-data/test.txt
$sudo docker container run -it -v $(pwd)/share-data:/home alpine

安装容器的卷

容器中的数据是短暂的,当容器停止时,不再存在。
如果要持久地将数据保持在容器中,则必须将其安装到共享存储卷中。

让我们使用"-V"选项作为安装卷的下面:

/# ls /home/
test.txt
/# cat /home/test.txt 
Hello theitroad readers

例如,让我们将主机上的"共享数据"目录安装到容器中的"/home"中:

$docker container run --rm image

输出:

$sudo docker container run ubuntu
$sudo docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                  NAMES
ad348fb61463        ubuntu              "/bin/bash"              8 seconds ago        Exited (0) 6 seconds ago                           distracted_hoover

一旦停止,删除容器

默认情况下,当容器停止时,其文件系统仍保留在主机上。
他们消耗了大量的存储座。
如果要在退出后自动删除容器,请使用--rm选项:

$sudo docker container run --rm ubuntu
$sudo docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

例如,运行一个没有--rm选项的Docker容器:

##代码##

使用- rm选项时,一个容器停止,它将自动删除。

##代码##