1. 首页 > 智能数码 >

启动docker命令(docker启动执行命令)

Docker命令

1、拉取镜像

docker pull image:version

2、后台启动

docker run --name-itdnginx nginx /bin/bash

2.1、后台开机启动

docker run --name nginx -itd --restart=always nginx /bin/bash

2.1.1、添加开机启动

docker update 容器ID/name --restart=always

3、进入容器

docker exec -it ID /bin/bash

4、批量停容器

docker stop $(docker ps -q)

5、启动已停止容器

docker start ID

6、实时查看日志

docker container logs -f ID

7、导出镜像

docker image save image-name:version -o image-name-v2

8、导入镜像

docker image load -i image-name

9、上传镜像

先打tag docker image tag local-image:version xxx/xxximagename

docker login

docker image pushxxx/xxximagename

10、删除不使用的容器

docker system prune -f

11、删除不使用的镜像

docker image prune -f

12、查看volume详情

docker volume inspect volume-name

13、windows下使用bind mount

docker container run -it -v ${pwd}:/app node sh ${pwd}表示当前目录 绑定node系统里的/app目录到windows的当前目录

14、Linux使用volume实现数据持久化

docker container run -d -v /mydata:/app image-name 把容器里的/app目录挂载到外部系统的/mydata

15、端口映射:主机88映射docker 80端口

docker run --name-itdnginx -p 88:80 nginx /bin/bash

16、保存容器的修改项,生成新镜像

docker commit 容器ID 新镜像name:版本号

17、启动镜像

docker run --name=xxx -d -p 88:80 image:version

18、文件拷贝

docker cp 文件/目录 容器ID:容器目录

docker cp容器ID:容器目录 文件/目录

19、查看容器详情

docker inspect 容器ID

20、匿名挂载

docker run -itd -v /usr/local/data(容器内目录) --name nginx01 nginx:latest 挂载容器内/usr/local/data到宿主机,在/var/lib/docker/volume查看 具体信息用 docker inspect 容器ID查看

21、具名挂载

docker run -itd -v nginx_data:/usr/local/data --name nginx01 nginx:latest 挂载容器内/usr/local/data到宿主机/var/lib/docker/volume/nginx_data

22、数据卷只读或读写

docker run -itd -v /data/nginx:/usr/local/data:rw --name nginx01 nginx:latest ro只读 rw读写

23、继承挂载

docker run -itd --volume-from nginx01 --name nginx02 nginx:latest nginx02和nginx01具有相同的挂载卷

24、挂载多个目录/文件

docker run -d -p 80:80 -v /mnt/html:/usr/html -v /data/nginx.conf:/etc/nginx/nginx.conf --name nginx01 nginx:latest

25、保存容器到新的镜像

dockercommitcontainter_id image_id

linux怎么启动docker

2.1 在测试机启动容器,安装ssh

docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会关闭。

apt-get install openssh-server #安装ssh

#需要修改/etc/sshd/sshd_config文件中内容

PermitRootLogin yes

UsePAM no

2.2 启动ssh,容器以后台方式运行

docker run -d -p 50001:22 <容器id> /usr/sbin/sshd-D

#容器id可通过 docker ps-a查看,最上面的为最新的。

2.3 通过ssh连接到容器安装软件

ssh root@127.0.0.1-p 50001

#连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。

2.4 服务安装完成后,停止容器。

docker stop <容器id> #停止运行的容器

2.5 把容器提交生成最新的镜像

docker commit <容器id> debian02 #把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)

2.6 打包镜像

docker save debian02 >/root/debian02.tar #debian02镜像打包

2.7 在另外的机器上导入镜像

docker load < debian02.tar #导入镜像

docker images #查看存在的镜像

2.8 启动容器

docker run -h="redis-test" --name redis-test -d -p 51000:22 -p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p 51007:8888 debian02 /etc/rc.local

#此处是我测试机器启动命令,指定主机名与端口映射。

#启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。

docker容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了,一堆依赖装的想死有木有。

3、关于docker容器的端口映射

由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:docker run -h="activemq" --name activemq -d -p 51000:22 -p 51001:3306-p 51003:6379 -p 51004:6381 -p 51005:80-p 51006:8000 -p 51007:8888 debian/base/etc/rc.local

#此处我把mysql,redis,nginx,ssh都进行了映射。

后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker stop,start来控制容器进程。docker stop activemq

docker start activemq

当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:

docker网络配置:

4、关于docker容器的多程序开机自动运行

docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会运行,对于要跑多个程序的容器特别纠结。

多程序开机自动运行方法:

可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。

后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start <容器ID>即可。

启动docker命令(docker启动执行命令)启动docker命令(docker启动执行命令)


Docker常用命令大全

基础操作:

1 docker images 查看镜像信息列表 镜像是静态的

2 docker ps -a 查看运行中的所有容器

3 docker pull [images]:[version] 从dockerhub拉取指定镜像

4 docker run -p 8000:80 -tdi --privileged [imageID][command] 后台启动docker,并指定宿主机端口和docker映射端口。

-i: 以交互模式运行容器,通常与 -t 同时使用;

-d: 后台运行容器,并返回容器ID;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--privileged 容器将拥有访问主机所有设备的权限

通常情况下 [command] 填下 /bin/bash 即可。

特殊情况下,如需要在centos镜像中使用 systemctl . 则应添加 --privileged 并设置[command ]为 init 。

5 当镜像通过run 启动后,便会载入到一个动态的container(容器)中运行,此时若需要进入终端交互模式:

sudo docker exec -it [containerID]/bin/bash

交互模式中,使用ctrl+p+q退出交互 保持运行,使用 exit命令退出并停止容器。

6 在容器非交互模式下,通过docker start/stop 命令来启动/停止已部署的容器服务。

7 docker rm [containerID] 删除容器

8 docker rmi [imageID] 删除镜像

9 docker cp [YourHostFilePath] [containerID]:[DockerPath] 将宿主机内的指定文件传输至容器内部的指定地址。

镜像制作:

1 docker commit [containerID] [ImageName]:[Version] 将修改后的容器重新打包成镜像

2 docker commit -a "" -m "my apache" a404c6c174a2 mymysql:v1 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

3 docker push [ImageID] [repertory_address] 提交镜像到云仓库

(暂时先记录这些,后续再更新)

Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)

摘要: Docker

容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等

容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下

在实际使用中启动一个镜像,例如

-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些-e参数,在Dockerfile指定环境变量

直接构建成容器

开启一个终端启动容器内部,打印指定的环境变量a

此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量

因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构

其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本

Dockerfile中启动run.sh脚本作为容器执行命令

在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下

-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如

如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下

同目录下start.sh内容是打印1

构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2

docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出

对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是

测试一个Dockerfile输出1

在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT

容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如

显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机->容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如

除了docker stop命令还有一种停止容器的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如

在容器停止之后可以使用 docker start 再启动一个停止的容器,例如

除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如

查看容器详情使用 docker inspect ,比如

在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令

容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如

除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况

当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台

创建Dockerfile以及构建镜像,启动容器

启动一个脚本不断请求api接口

进入容器内部查看日志

另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出

此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式

此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致

如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包

此时退出容器,并且删除容器,最后从镜像重新生成容器

此时进入容器检查,并不存在pymongo包

如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下

以新安装pymongo的容器为例,对新容器使用docker commmit

新生成的镜像叫做xiaogp/my_image_test:v2

从新镜像启动容器并进入容器查看存在新安装的pymongo

Docker实践之镜像启动及常用命令

前面简单的介绍了如何在Linux中安装 Docker ,这节内容,我们学习Docker镜像启动

我们Docker启动镜像从哪里来呢?镜像由我们自己或者他人构建,构建好的镜像可以直接放在本地或者上传到远程镜像仓库。当我们运行一个Docker镜像时,会先在本地查找是否存在所要运行的镜像,如果没有则会去远程镜像仓库拉取,默认为官方的镜像仓库,当然,我们也可以改为自己的私有镜像仓库。接下来,我们先了解几个简单的命令。

我们直接在安装好Docker的主机上执行 docker run nginx

我们从运行日志可以看到这样的字眼:

docker发现本地不存在nginx的镜像文件,便直接去仓库中查找下载并运行,因为我们没有让镜像后台运行,所以这次运行起来的容器会随着这次远程连接断开而停止。当我按下 ctrl+c 时,容器便会停止

如果要让容器后台运行,则需要在启动时加 -d 这个参数,

我们来看一下当前运行中的容器

可以看到,我们的nginx是启动起来了,但是,我们并不能访问它。容器有自己的一套虚拟系统,如:网络、文件。如果我们需要访问,则需要给容器和宿主机做一个映射,让宿主机和容器能够交互。这里,我们就给nginx增加端口和配置文件映射。我为了省事,就直接把容器中的配置文件复制出来用

接下来,我们便来建立这个映射关系

来看看容器是否启动成功

这时候,我们便能访问我们的nginx服务,

前面已经说到,容器有自己的虚拟系统,如果需要持久化的数据不映射到宿主机上,那么当容器销毁时,数据也会随之丢失,所以,我们在用容器运行时,一定要做好数据的保存方式。

在前面,我们列出了几个常用的Docker命令,这里,我们把这几个常用命令稍微讲解一下,

ps主要是查询正常运行的容器

docker ps 是当前正在运行的容器

这里面的 CONTAINER ID 很重要,后面我们的很多操作都需要基于这个 CONTAINER ID 或者 NAMES 。

docker ps -a 则是列出运行中和停止中的所有容器,

这几个参数这是启动/停止/重启/删除容器的参数,如: docker restart 5ae0319e1795 ,如果要删除容器,必须要先停止,否则会提示

docker run [OPTIONS] IMAGE [COMMAND] [ARG…],它的运行参数就比较复杂了,

这里还是只介绍几个常用的命令参数吧,

运行示例 docker run -d --name nginx-cc -v /root/nginx/:/etc/nginx/ -p 9999:80 -m 256M nginx

cp命令主要是用于宿主机和容器间的文件复制,一般格式如下:

docker cp [OPTIONS] 容器名/容器Id:容器文件路径 宿主机文件路径 从容器复制到宿主机

docker cp [OPTIONS] 宿主机文件路径 容器名/容器Id:容器文件路径 从宿主机复制到容器中

inspect主要是查看容器或者镜像元数据,如:

从返回的信息中,我们可以得到,启动时所设置的启动参数。如:

如果,那天我们忘记之前容器启动的参数时,便可以通过 inspect 来帮我们找回来。

logs主要是查询docker容器的运行日志,如:

Docker安装启动过程

可以参考阿里云的安装教程,这里使用了镜像加速器

当然我们也可以不用镜像加速直接安装,不过存在安装速度慢或者安装不成功的风险。

安装完成后需要start一下docker,查看一下版本信息已经docker的地址信息,如下图:

如果要设置docker开机启动,可以使用systemctl enable docker命令,这里start的时候可能会报错

在某些条件下,我们的机器可能不符合安装的条件,这个时候我们要检查一下我们的系统环境。

查看centos系统版本命令:

配置阿里云yum源

升级系统内核

查看centos系统内核命令

查看机器配置

关闭防火墙

关闭selinux

网桥过滤

命令补全

docker中使用docker

Docker 容器技术目前是微服务/持续集成/持续交付领域的第一选择。而在 DevOps 中,我们需要将各种后端/前端的测试/构建环境打包成 Docker 镜像,然后在需要的时候,Jenkins 会使用这些镜像启动容器以执行 Jenkins 任务。

为了方便维护,我们的 CI 系统如 Jenkins,也会使用 Docker 方式部署。

Jenkins 任务中有些任务需要将微服务构建成 Docker 镜像,然后推送到 Harbor 私有仓库中。

或者我们所有的 Jenkins Master 镜像和 Jenkins Slave 镜像本身都不包含任何额外的构建环境,执行任务时都需要启动包含对应环境的镜像来执行任务。

我们的 Jenkins Master、Jenkins Slaves 都是跑在容器里面的, 该如何在这些容器里面调用 docker run 命令启动包含 CI 环境的镜像呢?

在这些 CI 镜像里面,我们从源码编译完成后,又如何通过 docker build 将编译结果打包成 Docker 镜像,然后推送到内网仓库呢?

答案下面揭晓。

Docker 采取的是 Client/Server 架构,我们常用的 docker xxx 命令工具,只是 docker 的 client,我们通过该命令行执行命令时,实际上是在通过 client 与 docker engine 通信。

我们通过 apt/yum 安装 docker-ce 时,会自动生成一个 systemd 的 service,所以安装完成后,需要通过 sudo systemctl enable docker.service 来启用该服务。

这个 Docker 服务启动的,就是 docker engine,查看 /usr/lib/systemd/system/docker.service ,能看到有这样一条语句:

默认情况下,Docker守护进程会生成一个 socket( /var/run/docker.sock )文件来进行本地进程通信,因此只能在本地使用 docker 客户端或者使用 Docker API 进行操作。

sock 文件是 UNIX 域套接字,它可以通过文件系统(而非网络地址)进行寻址和访问。

因此只要以数据卷的形式将 docker 客户端和上述 socket 套接字挂载到容器内部,就能实现 "Docker in Docker",在容器内使用 docker 命令了。具体的命令见后面的「示例」部分。

要记住的是,真正执行我们的 docker 命令的是 docker engine,而这个 engine 跑在宿主机上。所以这并不是真正的 "Docker in Docker".

运行过Docker Hub的Docker镜像的话,会发现其中一些容器时需要挂载/var/run/docker.sock文件。这个文件是什么呢?为什么有些容器需要使用它?简单地说,它是Docker守护进程(Docker daemon)默认监听的Unix域套接字(Unix domain socket),容器中的进程可以通过它与Docker守护进程进行通信。

在容器内部使用宿主机的 docker,方法有二:

容器的启动方式也有两种,如下:

示例命令如下:

必须以 root 用户启动!(或者其他有权限读写 /var/run/docker.sock 的用户) 然后,在容器内就能正常使用 docker 命令,或者访问宿主机的 docker api 了。

docker-compose.yml 文件内容如下:

然后通过 docker-compose up -d 即可后台启动容器。

通过上面的操作,我们在容器内执行 docker ps 时,还是很可能会遇到一个问题: 权限问题 。

如果你容器的默认用户是 root,那么你不会遇到这个问题,因为 /var/run/docker.sock 的 onwer 就是 root.

但是一般来说,为了限制用户的权限,容器的默认用户一般都是 uid 和 gid 都是 1000 的普通用户。这样我们就没有权限访问 /var/run/docker.sock 了。

解决办法:

方法一(不一定有效):在构建镜像时,最后一层添加如下内容:

方法二:经测试一定有效,在Dockerfile中使用USER参数

这样我们构建的镜像就是root用户了,经测试在docker-compose.yaml文件中user参数并不好用,类似如下

这样我们的默认用户,就能使用 docker 命令了。

参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息