docker运行容器(Docker运行容器)
本篇文章给大家谈谈docker运行容器,以及Docker运行容器对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Docker检查运行中的容器的详细信息
- 2、在Docker容器中操作Docker (dind)
- 3、Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
- 4、docker容器运维命令有哪些
- 5、docker用宿主主机模式启动容器
Docker检查运行中的容器的详细信息
查看容器中详细信息,命令很简单宏桥,dcoker inspect id
首先用docker ps查看所有启动的镜像,
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44ab452b47fe docker.io/ubuntu:latest "/bin/bash"蔽迟猛 About a minute ago Up About a minute prickly_blackwell
[root@bogon ~]#
可以看到id是 44ab。。。。
利用命令查看容器的详细信息
[root@bogon ~]# docker inspect 44ab452b4
[
{
"Id"旦渗: "44ab452b47fe639b2ec2d0c3fb75f8b270c007d2e83843c331130c32b67e6ca3",
"Created": "2016-01-12T13:46:16.365773903Z",
"Path": "/bin/bash",
"Args": [],
"State": {
输出太多了 我只截取了一部分。
[img]在Docker容器中操作Docker (dind)
就是在Docker容器中再次运行一个Docker服务.
在一个乎拿容器中操作Docker在CI工具中是很常见的, 如构建一个Docker镜像.
但由于在容器中运行一个Docker服务会有各种问题, 如镜像文件存储, 嵌套的容器也并不容易维护, 后来便衍生出了另一种更实用的方案: 挂载主机上Docker服务的sock
这样将不会遇到嵌套副作用,并且将在多个调用之间共享构建缓存。
ps: 更多知识请阅读 docker 官方提及的这篇文章: do-not-use-docker-in-docker-for-ci
我接下来要写的也是如何使用它, 并记录我的使用场景.
我有一个需求是这样的:
当某个镜返顷尘像更新之后, 通知docker重新pull并部署. 简单的来说就是当容器更新, 就自动运行
以实现更新部署.
由于自己编写的程序也运行在Docker中, 而不是宿主机, 所有没办法直接执行以上命令, 这就需要Docker In Docker了.
简单来说 你只需要这样:
然后 docker ps 就能看到 宿主机上 的所有容器.
如我的就是
当然 这里的stack.yaml文件需要在构建这个容器时添加进来 或者 挂载进来, 这肯定难不倒你.
如果你要将这段CMD在你的程序中运行也十分简单:
写好程序之后你可以使用这个Dockfile构建你的镜像
而运行这个镜像的stack.yaml文件需要配置挂载
你会看到我又挂载了.docker文件夹, 这个无关紧要, 在后面的疑难杂症会说漏禅到这个问题.
此参数是17.9版本之后新加的, 用于解决deploy不pull最新的镜像的问题. 详情看这个ISSUE:
force docker deploy to pull new images
私有仓库必须登录才有访问权限, 所以需要在宿主机上先login, 登录成功后会发现在 ~/.docker有新生成的 配置文件
, 其中存储了认证所需要的信息. 但在Docker容器中拿不到这个信息所以就会报错.
解决办法是将配置文件挂载进容器
问题描述:
网络结构如下:
客户端 - 服务器上的Nginx容器 (反代)- 应用程序
在Nginx中配置了
在应用程序中得到"HTTP_X_FORWARDED_FOR"头 却是10.255.0.2, 而不是客户端真正的ip.
解决办法:
google : docker 10.255.0.2
得到的信息挺多的, 大多数是Docker3年4年都没有close的ISSUE....
当前可用的解决办法有
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容器运维命令有哪些
docker run -d --name alias-Name imageName //在后台启动一个容器
docker start Name/ID //启动容器
docker stop Name/ID //停止容器
docker restart Name/ID //重启容器
docker kill -s KILL Name/ID //杀死一个运行的容器
docker rm /rm -f Name/ID //删除容器
docker pause Name/ID //停止容器
docker unpause Name/ID //恢复容器
docker create --name CONTAINER_Name imageName //只创建容器但不启动
docker ps / docker ps -a //查看运行的容器
docker exec -it CONTAINER_ID /bin/bash //进行一个运行中的容器,开启一个新的终端
docker attach CONTAINER_ID //进行一个运行中的容器,不开启一个新的终端
docker inspect CONTAINER_Name //查看容器的相关信息
docker top CONTAINER_Name //查看容器里面的进程
docker events -f "image"="imageName" --since="1467302400" //时间戳=2016年姿好7月1日后的相关事件
docker logs CONTAINER_Name //查看容器的日志输出
docker wait CONTAINER_Name //阻塞运行直到容器停止,然后打印出它的退出代码
docker export -o test.tar CONTAINER_ID //将容器进行打包保存到本地,文件类型为tar
cat test.tar |docker import - image_name:tag //将上面保存的文件导入到镜像库中
docker port CONTAINER_ID //查看容器的端口映射情况
commit 从容器中创建一个新的链羡镜像
docker commit -a "tony test" -m "迹唤铅my mysql" CONTAINER_ID mymysql:v1
docker images mymysql:v1
cp 在使用的过程中会进行多个主机与容器之间的数据交换
docker cp /ruiqi/content CONTAINER_ID:/ruiqi/
diff 用来检查容器里面文件结构的更改
docker diff CONTAINER_ID
docker images /docker images -a //查看本地的镜像,-a 表示是所有的镜像
docker rmi -f image_name //删除镜像
docker tag mysql:v5.6 mysql:v5.7 //给镜像做一个有别名的复本
docker build -t runoob/ubuntu:v1 . //构建一个镜像
docker history image_name //查看当前这个镜像的 历史 信息
docker save -o TestFlask.tar TestFlask:v3 //将当前的镜像保存到本地的一个tar 类型的文件
docker login //登录镜像仓库
docker pull //从镜像仓库中拉镜像
docker push //向镜像仓库推本地的镜像文件
docker search //检索镜像内容
docker用宿主主机模式启动容器
使用宿主主机模式启动Docker容器,可橡颤以使Docker容则让器和宿主机共梁盯败享同一个网络命名空间。这意味着Docker容器的网络栈将直接使用宿主机的网络设备,而不是创建自己的虚拟网络设备。
使用宿主主机模式启动Docker容器可以提高网络性能,但也会破坏容器的隔离性,容器中运行的进程将能够访问宿主机上的所有端口和服务。因此,只有在确保容器内的应用程序需要直接访问宿主机网络或者需要最大化网络性能时才应该使用宿主主机模式。
您可以使用以下命令以宿主主机模式启动Docker容器:
```
docker run --net=host image_name
```
其中`image_name`是要启动的Docker镜像的名称。
关于docker运行容器和Docker运行容器的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。