首页
常用命令
About Me
推荐
weibo
github
Search
1
linuxea:gitlab-ci之docker镜像质量品质报告
41,899 阅读
2
Graylog收集文件日志实例
17,184 阅读
3
linuxea:如何复现查看docker run参数命令
16,699 阅读
4
linuxea:jenkins+pipeline+gitlab+ansible快速安装配置(1)
16,694 阅读
5
git+jenkins发布和回滚示例
16,529 阅读
ops
Openvpn
Sys Basics
rsync
Mail
NFS
Other
Network
HeartBeat
server 08
Code
Awk
Shell
Python
Golang
virtualization
KVM
Docker
openstack
Xen
kubernetes
kubernetes-cni
Service Mesh
Data
Mariadb
PostgreSQL
MongoDB
Redis
MQ
Ceph
TimescaleDB
kafka
surveillance system
zabbix
ELK Stack
Open-Falcon
Prometheus
Web
apache
Tomcat
Nginx
自动化
Puppet
Ansible
saltstack
Proxy
HAproxy
Lvs
varnish
更多
音乐
影视
music
Internet Consulting
最后的净土
软件交付
持续集成
gitops
devops
登录
Search
标签搜索
kubernetes
docker
zabbix
Golang
mariadb
持续集成工具
白话容器
linux基础
nginx
elk
dockerfile
Gitlab-ci/cd
最后的净土
基础命令
docker-compose
saltstack
haproxy
jenkins
gitops
GitLab
marksugar
累计撰写
662
篇文章
累计收到
140
条评论
首页
栏目
ops
Openvpn
Sys Basics
rsync
Mail
NFS
Other
Network
HeartBeat
server 08
Code
Awk
Shell
Python
Golang
virtualization
KVM
Docker
openstack
Xen
kubernetes
kubernetes-cni
Service Mesh
Data
Mariadb
PostgreSQL
MongoDB
Redis
MQ
Ceph
TimescaleDB
kafka
surveillance system
zabbix
ELK Stack
Open-Falcon
Prometheus
Web
apache
Tomcat
Nginx
自动化
Puppet
Ansible
saltstack
Proxy
HAproxy
Lvs
varnish
更多
音乐
影视
music
Internet Consulting
最后的净土
软件交付
持续集成
gitops
devops
页面
常用命令
About Me
推荐
weibo
github
搜索到
91
篇与
Docker
的结果
2019-02-14
linuxea:如何从docker镜像恢复Dockerfile
有这么两个场景:1,当我丢失了原本的Dockfile,我希望找回Dockerfile,但是我只有镜像2,我希望知道一个镜像中的Dockfile详情鉴于此,我找到了几种解决方案,大致可以复现出Dockfile的很大一部分的内容,如下:我们有必要了解docker history ,但是仅仅使用docker history --no-trunc是无法提取完整docker环境[root@linuxea.com ~]# docker version Client: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:03 2018 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.06.1-ce API version: 1.38 (minimum version 1.12) Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:25:29 2018 OS/Arch: linux/amd64 Experimental: falseDiveDive用于发现docker镜像,镜像层内容以及发现缩小Docker镜像大小的方法的工具。要分析Docker镜像,只需使用图像标记/ id / digest运行潜水:dive <your-image-tag>或者如果你想建立新的,那么直接跳到分析它:dive build -t <some-tag> .建立在Macbook上docker run --rm -it \ -v /usr/local/bin/docker:/bin/docker \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$(pwd)":"$(pwd)" \ -w "$(pwd)" \ -v "$HOME/.dive.yaml":"$HOME/.dive.yaml" \ wagoodman/dive:latest build -t <some-tag> .rpm安装curl -OL https://github.com/wagoodman/dive/releases/download/v0.6.0/dive_0.6.0_linux_amd64.rpm rpm -i dive_0.6.0_linux_amd64.rpmDive查看Dockerfile使用dive marksugar/redis:5.0.0 即可查看,如下图中。相信你也看到了,这里的内容不止于此Dive CI此外,您可以在CI管道中运行此命令,以确保将浪费的空间保持在最低限度(这会跳过UI):CI=true dive <your-image>ok,我们本来是看Dockfile的,但是也不妨测试一下镜像的质量使用CI=true dive marksugar/redis:5.0.0bash解决方案我们看一下效果脚本如下:#!/bin/bash ######################################################################### # File Name: dockerfile.sh # Author: www.linuxea.com # Version: 1 # Created Time: Thu 14 Feb 2019 10:52:01 AM CST ######################################################################### case "$OSTYPE" in linux*) docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers tac | # reverse the file sed 's,^\(|3.*\)\?/bin/\(ba\)\?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL... sed 's, *&& *, \\\n \&\& ,g' # pretty print multi command lines following Docker best practices ;; darwin*) docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers tail -r | # reverse the file sed -E 's,^(\|3.*)?/bin/(ba)?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL... sed $'s, *&& *, \\\ \\\n \&\& ,g' # pretty print multi command lines following Docker best practices ;; *) echo "unknown OSTYPE: $OSTYPE" ;; esac分步说明:docker history --no-trunc --format "{{.CreatedBy}}" $1 从镜像层中提取信息tac 反转文件sed 's,^\(|3.*\)\?/bin/\(ba\)\?sh -c,RUN,' 修改shell调用run的操作sed 's,^RUN #(nop) *,,' '删除/bin/sh调用ENV,LABEL等sed 's, *&& *, \\\n \&\& ,g 以更易读的方式打印此运行 bash dockerfile2.sh CONTAINER_NAME即可,如:[root@linuxea.com ~]# bash dockerfile2.sh marksugar/redis:5.0.0学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器docker-compose
2019年02月14日
5,411 阅读
0 评论
1 点赞
2019-02-12
linuxea:如何复现查看docker run参数命令
如果有这样以一个场景。我使用docker run启动了了一个redis容器,而docker run的参数有很多,由于时间太久,我已经忘记了当初的启动参数,也并没有使用docker-compose这样的编排工具。现在我如何进行重启,如何找回此前的启动命令?示例使用docker run启动一个容器, docker run \ --detach \ --env REDIS_CONF=on \ --env REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh \ --env MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh \ --env MAXCLIENTS_NUM=30 \ --net=host \ --env MAXMEMORY_SIZE=1024M \ --publish 6379:6379 \ --volume linuxea_volume \ --name linuxea_redis \ --tty --interactive \ marksugar/redis:5.0.0docker COMMAND完整命令查看首先,我们查看启动的脚本参数和完整的命令使用 docker ps -a --no-trunc docker ps -a --no-trunc可以打印docker ps -a的隐藏部分,但是这并不能看到我们run的参数[root@LinuxEA-172_25_50_250 ~]# docker ps -a --no-trunc CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c32bc1bba3a0f8d59e3bd96648838399287ee183ddbff1ca1293ccbc933c8ede marksugar/redis:5.0.0 "/Initialization.sh" 8 minutes ago Up 8 minutes linuxea_redis 1d848a10149325e6fb46ef5fa0624812ab12f28263535720d79aa564a5551e45 marksugar/nginx_createrepo:v0.2 "entrypoint.sh" 13 days ago Up 13 days nginx_repo## docker inspect此时,我们试图找回上述的docker run命令,使用docker inspect ,但是docker inspect打印的是json文件,我们需要挑选字段查看[root@LinuxEA-172_25_50_250 ~]# docker inspect -f "{{.Name}} {{.Path}} {{.Args}} {{.Config.Cmd}} {{.Config.Env}} {{.Config.Volumes}} {{.Config.Entrypoint}} {{.NetworkSettings.Networks}}" $(docker ps -a -q) /linuxea_redis /Initialization.sh [] [] [REDIS_CONF=on REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh MAXCLIENTS_NUM=30 MAXMEMORY_SIZE=1024M PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin RS_VSON=5.0.0 RS_USER=redis RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz BATADIR=/usr/local/redis DATADIR=/data/redis DATALOG=/data/logs DATACIG=/etc/redis] map[linuxea_volume:{}] [/Initialization.sh] map[host:0xc420182000] /nginx_repo entrypoint.sh [] [] [USERNAME=marksugar FTPPASSWD=123 FTPDATA=/data/wwwroot SERVER_NAME=meftp.ds.com NGINX_PORT=80 WELCOME="welome to linuxea.com" PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin version=1.14.2 USER=www INSTALL_PATH=/usr/local WWWPATH=/data/wwwroot] map[/tmp/header.html:{} /data:{} /etc/localtime:{} /etc/nginx/nginx.conf:{} /etc/nginx/vhost:{} /tmp/footer.html:{}] [entrypoint.sh] map[host:0xc42044c000]这样的显示并不直观。好在我发现了rekcod和runlike这两个逆转docker run命令,参见本章介绍和使用。runlike更漂亮些rekcod借助rekcod打印出更易读的格式,docker inspect→docker rundocker run从现有容器(via docker inspect)反向设计命令。rekcod可以将以下任何内容转换为docker run命令:容器ID /名称(rekcod将调用docker inspect)包含docker inspect输出的文件的路径原始JSON(docker inspect直接传递输出)每个docker run命令都可用于复制容器。这不是非常强大,但它应该涵盖所需的大多数参数。请参阅下面支持的字段传递容器ID /名称时,此模块docker inspect直接调用,运行它的用户也应该能够。开始安装install rekcodyum install npm -y npm i -g rekcod如果您只安装了Docker:$ docker pull nexdrew/rekcod $ alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod"或者你可以简单地运行它,不需要安装:$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>开始使用以使用linuxea_redis容器为例,rekcod linuxea_redis,如下:[root@LinuxEA-172_25_50_250 ~]# docker ps -qa|rekcod或者这样[root@LinuxEA-172_25_50_250 ~]# rekcod linuxea_redis docker run --name linuxea_redis --runtime runc -p 6379:6379/tcp --net host --restart no -h LinuxEA-Node172_25_50_250.cluster.com --expose 26379/tcp --expose 6379/tcp -e 'REDIS_CONF=on' -e 'REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh' -e 'MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh' -e 'MAXCLIENTS_NUM=30' -e 'MAXMEMORY_SIZE=1024M' -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'RS_VSON=5.0.0' -e 'RS_USER=redis' -e 'RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz' -e 'BATADIR=/usr/local/redis' -e 'DATADIR=/data/redis' -e 'DATALOG=/data/logs' -e 'DATACIG=/etc/redis' -d -t -i --entrypoint "/Initialization.sh" marksugar/redis:5.0.0 我将结果换行查看,并且进行启动[这里不得不说的是,在runlike中,可以使用-q自动换行.见下文]docker run --name linuxea_redis \ -p 6379:6379/tcp \ --net host \ --restart no \ -h LinuxEA-Node172_25_50_250.cluster.com \ --expose 26379/tcp \ --expose 6379/tcp \ -e 'REDIS_CONF=on' \ -e 'REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh' \ -e 'MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh' \ -e 'MAXCLIENTS_NUM=30' \ -e 'MAXMEMORY_SIZE=1024M' \ -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' \ -e 'RS_VSON=5.0.0' \ -e 'RS_USER=redis' \ -e 'RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz' \ -e 'BATADIR=/usr/local/redis' \ -e 'DATADIR=/data/redis' \ -e 'DATALOG=/data/logs' \ -e 'DATACIG=/etc/redis' \ -d -t -i --entrypoint "/Initialization.sh" marksugar/redis:5.0.0启动成功[root@LinuxEA-172_25_50_250 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 492f6cdc159c marksugar/redis:5.0.0 "/Initialization.sh" 4 seconds ago Up 3 seconds linuxea_redis 1d848a101493 marksugar/nginx_createrepo:v0.2 "entrypoint.sh" 13 days ago Up 13 days nginx_repo[root@LinuxEA-172_25_50_250 ~]# docker logs linuxea_redis [i] Start configuration /etc/redis [ok] /etc/redis/redis.conf config ready [ok] Start variable substitution REDIS_CONF=on [ok] Replace the maxclients=30 variable value [ok] Replace the maxmemory=1024M variable value [ok] Replace the requirepass=OTdmOWI4ZTM4NTY1M2M4OTZh variable value [ok] Replace the masterauth=OTdmOWI4ZTM4NTY1M2M4OTZh variable value [i] Start up /usr/local/bin/redis-server /etc/redis/redis.conf runlike我仍然要提一下runlike,和rekcod有一样的作用本地安装使用yum install python-pippip install runlike用法:runlike <container-name>这打印出你需要运行什么来获得类似的容器。你可以$(runlike container-name)一步完成其输出。如下:[root@LinuxEA-172_25_50_250 ~]# runlike linuxea_redis docker run --name=linuxea_redis --hostname=LinuxEA-Node172_25_50_250.cluster.com --env=REDIS_CONF=on --env=REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh --env=MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh --env=MAXCLIENTS_NUM=30 --env=MAXMEMORY_SIZE=1024M --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=RS_VSON=5.0.0 --env=RS_USER=redis --env=RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz --env=BATADIR=/usr/local/redis --env=DATADIR=/data/redis --env=DATALOG=/data/logs --env=DATACIG=/etc/redis --volume=linuxea_volume --network=host -p 6379:6379 --restart=no --detach=true -t marksugar/redis:5.0.0-p将命令行分解为漂亮漂亮的行。例如:[root@LinuxEA-172_25_50_250 ~]# runlike -p linuxea_redis docker run \ --name=linuxea_redis \ --hostname=LinuxEA-Node172_25_50_250.cluster.com \ --env=REDIS_CONF=on \ --env=REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh \ --env=MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh \ --env=MAXCLIENTS_NUM=30 \ --env=MAXMEMORY_SIZE=1024M \ --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ --env=RS_VSON=5.0.0 \ --env=RS_USER=redis \ --env=RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz \ --env=BATADIR=/usr/local/redis \ --env=DATADIR=/data/redis \ --env=DATALOG=/data/logs \ --env=DATACIG=/etc/redis \ --volume=linuxea_volume \ --network=host \ -p 6379:6379 \ --restart=no \ --detach=true \ -t \ marksugar/redis:5.0.0docker使用runlike被封装为一个名为assaflavie / runlike的Docker镜像。docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER或者您可以使用别名运行它,例如,将其保存在~/.profile或中~/.bashrcalias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"然后您可以直接以本地命令运行runlike YOUR-CONTAINERdocker-compose事实上这样的方式,我并不推荐,你大可不必这样 麻烦,直接使用docker-compose就可以完成简单的编排,如下:version: '2' services: redis: image: marksugar/redis:5.0.0 container_name: redis restart: always network_mode: "host" privileged: true environment: - REDIS_CONF=on - REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh - MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh - MAXCLIENTS_NUM=600 - MAXMEMORY_SIZE=4096M volumes: - /etc/localtime:/etc/localtime:ro # - /etc/redis:/etc/redis - /data/redis-data:/data/redis:Z - /data/logs:/data/logs学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器docker-compose
2019年02月12日
16,699 阅读
0 评论
0 点赞
2019-02-11
linuxea:如何设置docker日志轮换
倘若你在使用docker,那么你肯定遇到过这种情况。日志太大占用了磁盘空间有太多了历史日志,查看并不便利在许多情况下,读取日志在调试时占用了大部分时间。本文介绍如何为Docker容器设置日志轮换。默认日志记录驱动程序我们可以为容器配置不同的日志驱动程序 默认情况下,容器的stdout和stderr写在位于/var/lib/docker/containers/[container-id]/[container-id]-json.log中的JSON文件中。如果将其置于无人看管状态,则会占用大量磁盘空间,如下所示。手动清除日志如果此JSON日志文件占用了大量磁盘,我们可以使用以下命令清除它。truncate -s 0 < logfile >我们可以设置一个cronjob来定期清除这些JSON日志文件。但从长远来看,设置日志轮换会更好。设置日志轮换配置默认日志记录驱动程序这可以通过在/etc/docker/daemon.json中添加以下值来完成。如果该文件不存在,请创建该文件。[root@linuxea ~]# cat /etc/docker/daemon.json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "10" } }该JSON文件有几个选项,我们甚至可以更改为其他日志驱动器,如系统日志。有关更多信息,请参阅Docker文档 - 配置日志记录驱动程序。执行命令以重新加载更新的daemon.json。重新启动后,新配置将应用于所有新创建的容器。配置容器的日志记录驱动程序如果你不想在全局范围内应用配置,也可以在容器级别上完成配置。docker run命令我们可以在docker run命令中指定日志记录驱动程序和选项。例如:$ docker run \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=10 \ alpine echo hello world使用docker-compose还可以使用docker-compose配置日志记录驱动程序和选项。例如:version: '3.2' services: nginx: image: 'marksugar/redis:5.0' ports: - '3306:3306' logging: driver: "json-file" options: max-size: "1k" max-file: "3"这样一来,就会变成有3个1k的日志文件,多余的会被切割删除掉。你还可以使用单个文件,通过调整max-size大小决定。docker目录转移如果你的容器非常的多,那么日志量也就会增加,随之而来的问题可能是根目录不够用。我们可以改善这一点1,首先关闭docker2,移动docker目录到target location3,而后做软连接如下所示:service docker stop // 关闭docker mv /var/lib/docker /root/data/docker //将docker目录移动到/root/data/docker ln -s /root/data/docker /var/lib/docke //链接到/var/lib/docker学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器
2019年02月11日
2,962 阅读
0 评论
0 点赞
2019-02-10
linuxea:docker标签的简单介绍
如果你已经开始使用docker,你肯定遇到过docker的标签,他们通常看起来像“my_image_name:v1”,其中冒号后面的部分称为标记,标记image时不总是标记,文下会有解释什么是Docker标签?那么,Docker标签到底是什么?简单来说,Docker标签传达有关特定images版本/变化的有用信息。它们是image ID的别名,通常如下所示:965b523dfe25。这种类似与git的提交版本号。标签发挥作用的两种最常见的情况是:构建镜像时,我们使用以下命令:docker build -t username / image_name:tag_name .让我们试着分解一下这个命令的作用。我们告诉Docker守护进程获取当前目录中存在的Docker文件(这就是最后 .的目的)。接下来,我们告诉Docker守护程序构建镜像并为其指定标记。如果你运行docker images,你应该看到一个存储库是username/image_name和标签的imagetag_name。username/image_name 不是指定image名称的强制格式。当你需要将image推送到Docker仓库时,避免再次标记image,这仅作为一个有用的约定。你的image可以根据需要命名。对于公共Docker仓库,在命名image时,你被限制为两级层次结构。例如,你的image不能具有名称a/b/c:1.此限制通常不存在于私有仓库中。如前所述,并非强制要求指定一个tag_name.我们将很快看到在这种情况下会发生什么。2.通过tag命令显式标记image。docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]这个命令只是通过创建的名称的别名(参考)TARGET_IMAGE 是指SOURCE_IMAGE.这就是它所做的一切。这就像为现有image指定另一个名称来引用它。注意标签如何在这里被指定为可选的[:TAG] 。如果不指定标签会发生什么?好的,现在让我们来看看在标记image时没有指定标记时会发生什么。这是latest标签进入image的地方。每当image被标记而没有显式标记时,latest默认情况下会给出标记。这是一个令人遗憾的命名选择,会引起很多混乱。但我喜欢将它视为未指定image时为image指定的默认标记。latest由于期望它是image的最新版本,特别是在Dockerfiles中引起了很多混乱。让我们用一个例子来考虑各种场景:场景1:假设我们的Dockerfile中存在以下语句:From debian由于我们没有指定任何标记,Docker将添加latest标记并尝试拉取imagedebian:latest 。场景2:From debian:9.3由于此处明确提到了标记,因此Docker将拉出标记为9.3的Debian image另外要记住的是,没有规则说明image只需要一个标签。image可以有多个标签,它们通常用于指定主要版本和次要版本。例如,参考一下:在撰写本文时,Debian image的最新标记指向9.3版本和9版本。每当主要版本或次要版本碰撞时,image很可能在将来发生变化。请注意,用于定义版本控制的标记是遵循的约定,但标记不是为此目的而设计的总之,最新的不是特殊标签到目前为止我们所介绍的主要内容是最新版本latest与其他标签一样。开发人员有责任正确标记image,以便latest始终指向image的最新稳定版本。因此,我们在拉动image时没有在我们的Dockerfiles中明确指定标记,因为我们最终可能会得到与之前使用的基本image完全不同的版本。 无法保证它是否会出现不同版本自己的差异。 即使旧版本也可以标记为最新版本。学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器
2019年02月10日
2,399 阅读
0 评论
0 点赞
2019-02-09
linuxea:如何使用docker-compose优雅的运行多个容器
前言:docker公司在2015年收购fig项目,而在早期fig项目是非常热度的,这比kubermetes要早,fig之所以收到欢迎就是因为,fig提出了容器编排,并且在一定范围解决了"容器编排"fig被收购后改名为compose,随即成为docker公司最受欢迎的第二大受欢迎的项目,直到今天仍然被很多人使用。docker-compose.yml通过使用up和down命令启动和停止容器,并且可以使用docker-compose定义应用程序细节,并且可以控制多容器应用程序。Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,你可以使用Compose文件来配置应用程序的服务。然后,使用单个命令,你可以从配置中创建并启动所有服务。- docker在Github上地址与docker命令的相似之处docker-compose CLI命令是类似于于docker的命令,除了一些与多个容器和image的指令相关的附加内容。特别是,如果你将它们与docker一起使用的时候,以下命令是需要熟悉的:ps,build,pull,push,run,logs在我发布的十大Docker命令中了解更多关于这些的信息。docker-compose up and downdocker-compose up创建和启动容器。在“ 分离(后台) ”模式(-d)中,Compose在启动容器后退出,但容器继续在后台运行。docker-compose up -d linuxea_nginxdocker-compose down - 停止并删除容器,网络,image和卷,例如docker-compose down -v。这有一些有用的选择:--rmi type 删除images。 类型必须是以下之一:-v, --volumes 删除在Compose文件的volumes部分中声明的命名卷和附加到容器的匿名卷,匿名卷发生在dockerfile中,我们可以在之外,覆盖匿名卷。--remove-orphans 删除未在Compose文件中定义的服务的容器创建一个Dockerfile就像运行docker一样,你需要一个Dockerfile来指定如何为程序创建镜像和容器。Ruby on Rails应用程序的Dockerfile示例可以是:FROM ruby:2.3.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install volumes /datalinuxea COPY . /myapp该docker-compose:入门指南让你一步一步的指示,创建Dockerfile并将其集成到你的docker-compose.yml。如上: volumes /datalinuxea就是匿名卷docker-compose.yml:的结构和组件要定义多容器应用程序,请在项目的根目录中使用docker-compose.yml文件。该docker-compose文档提供详细的解释和指导,了解此文档更好的掌握。以下是一些主要功能的快速入门指南:在顶部包括版本: version: "3"在docker-compose版本中,是有一定的差异,这需要使用者查探问题,如早期的v3弃用volumes_from然后 services:在此之后,列出要创建的容器,例如每个容器都有配置选项。image - 这可能是存储在docker hub中的image,也可能是存储在本地的imageimage: ruby:alpinedepends_on - 此容器需要的其他容器,创建父容器也将创建和启动依赖容器。倘若此刻,运行一个LNMP,那么我们首先应该让mariadb 先启动,而后是php,再nginx,depends_on则对这些启动的依赖顺序起到关键的作用。如下所示中,web是以来db和redis,只有db和redis 成功up起来后才会启动webversion: '3' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgresenvironment - 添加环境变量。environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRETvolumes - 包括主机路径或命名卷。你可以使用此格式替换容器中的数据,<path to file>:<path to location in container>并且可以使用权限(例如 :ro,只读)来执行此操作。version: "3.2" services: web: image: nginx:alpine volumes: - type: volume source: mydata target: /data volume: nocopy: true - type: bind source: ./static target: /opt/app/static db: image: postgres:latest volumes: - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock" - "dbdata:/var/lib/postgresql/data"ports - 指定ports(HOST:CONTAINER)或仅指定容器端口(选择短暂的主机端口)。ports: - "3000" - "3000-3005" - "8000:8000" - "9090-9091:8080-8081" - "49100:22" - "127.0.0.1:8001:8001" - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp" 有关端口的更多信息,请查看linuxea:简单解释docker的端口和端口暴露(EXPOSE)。了解更多Docker Compose是运行多容器应用程序的强大工具。有许多方法可以配置你的应用程序docker-compose.yml以及其他Docker Compose CLI命令来学习。查看Docker文档和我的其他帖子了解更多信息。docker-compose:入门docker-compose CLI文档Docker-compose docs:文档阅读更多docker文章十大Docker命令,你必须了解如何过滤和grep Docker容器,image和卷以及如何使用它们使用单个命令清理Docker镜像,容器和卷学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器dockerfile
2019年02月09日
3,668 阅读
0 评论
0 点赞
2019-02-08
linuxea:有效使用docker logs查看日志
在开发基于Docker的应用程序时,能够在日志中查找特定信息并将此数据保存到文件中可以加快故障排除和调试过程。以下是使用日志选项,tail和grep在docker容器的日志数据中查找所需内容的一些提示。关于开始使用Docker的帖子新手docker cli指令和docker run十个选项和其他docker帖子显示所有日志在启动Docker容器(例如with)时docker-compose up,它将自动显示日志。如果你在后台运行它们,例如使用docker-compose up -d或从不同的终端运行它们,则可以使用以下方式显示日志:docker logs [OPTIONS] CONTAINERdocker-compose logs (所有容器)但是,这将为你提供大量信息。跟踪容器日志使用docker-compose,你可以指定要使用的容器日志(在位于docker-compose文件的当前目录执行):docker-compose logs [options] [SERVICE...]调试特定应用程序时,一个有用的选项是持续实时查看日志输出。这意味着你可以启动容器,测试功能并查看在使用时发送到日志的内容。--follow , -f另一种方法是测试你的应用程序,然后在日志中搜索特定信息,以向你显示它的工作情况(或不是!!!)。有两个基于Unix命令的命令可用于此目的。使用tail和grep切片和搜索日志该tail命令输出n文件末尾的最后一行数。例如:[root@LinuxEA-172_25_50_250 /data/mirrors]# tail -n5 docker-compose.yaml - FTPPASSWD=123 - FTPDATA=/data/wwwroot - SERVER_NAME=meftp.ds.com - NGINX_PORT=80 - WELCOME="welome to www.linuxea.com"要查看docker日志中的最新输出,你可以直接在日志文件中使用它,也可以使用docker --tail选项。--tail 从日志末尾显示的行数[root@LinuxEA-172_25_50_250 /data/mirrors]# docker-compose logs --tail 5 nginx_repo Attaching to nginx_repo nginx_repo | 2019-01-29 17:45:58,689 INFO spawned: 'vsftpd' with pid 26 nginx_repo | 2019-01-29 17:45:58,738 INFO exited: vsftpd (exit status 0; not expected) nginx_repo | 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO gave up: vsftpd entered FATAL state, too many start retries too quickly这仅仅只是一个示例,其他选项如,-f, -t ,--tail docker官网也有说明另外,可以与日志一起使用的另一个Bash命令是grep返回包含指定字符串的行。例如:docker-compose logs | grep success这将显示docker容器记录的所有想要的信息。非常有用,可以看到你需要关注开发的重点。[root@LinuxEA-172_25_50_250 /data/mirrors]# docker-compose logs --tail 5 nginx_repo|grep success nginx_repo | 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)按时间记录如果你知道要关注的时间段,例如你知道存在问题的时间,则可以告诉docker使用时间戳显示时间戳--timestamps , -t[root@LinuxEA-172_25_50_250 /data/mirrors]# docker-compose logs -t nginx_repo Attaching to nginx_repo nginx_repo | 2019-01-29T09:45:57.110408403Z useradd: warning: the home directory already exists. nginx_repo | 2019-01-29T09:45:57.110441950Z Not copying any file from skel directory into it. nginx_repo | 2019-01-29T09:45:57.136689405Z Changing password for user marksugar. nginx_repo | 2019-01-29T09:45:57.136748778Z passwd: all authentication tokens updated successfully. nginx_repo | 2019-01-29T09:45:57.593741281Z Saving Primary metadata nginx_repo | 2019-01-29T09:45:57.593832853Z Saving file lists metadata nginx_repo | 2019-01-29T09:45:57.593854286Z Saving other metadata nginx_repo | 2019-01-29T09:45:57.593862151Z Generating sqlite DBs nginx_repo | 2019-01-29T09:45:57.593869092Z Sqlite DBs complete nginx_repo | 2019-01-29T09:45:57.672214250Z 2019-01-29 17:45:57,671 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message. nginx_repo | 2019-01-29T09:45:57.679619865Z 2019-01-29 17:45:57,679 INFO RPC interface 'supervisor' initialized nginx_repo | 2019-01-29T09:45:57.679661466Z 2019-01-29 17:45:57,679 CRIT Server 'unix_http_server' running without any HTTP authentication checking nginx_repo | 2019-01-29T09:45:57.679740900Z 2019-01-29 17:45:57,679 INFO supervisord started with pid 1 nginx_repo | 2019-01-29T09:45:58.683866045Z 2019-01-29 17:45:58,683 INFO spawned: 'nginx' with pid 24 nginx_repo | 2019-01-29T09:45:58.687228502Z 2019-01-29 17:45:58,686 INFO spawned: 'createrepo' with pid 25 nginx_repo | 2019-01-29T09:45:58.690025433Z 2019-01-29 17:45:58,689 INFO spawned: 'vsftpd' with pid 26 nginx_repo | 2019-01-29T09:45:58.738620050Z 2019-01-29 17:45:58,738 INFO exited: vsftpd (exit status 0; not expected) nginx_repo | 2019-01-29T09:45:59.740406128Z 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29T09:45:59.740444435Z 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29T09:45:59.740540049Z 2019-01-29 17:45:59,740 INFO gave up: vsftpd entered FATAL state, too many start retries too quickly选择一个特定的时间段--since和--until选项(仅适用于docker logs,不是docker-compose logs):--since从时间戳(例如2013-01-02T13:23:37)或相对(例如42分钟42米)显示日志--until在时间戳(例如2013-01-02T13:23:37)或相对之前显示日志(例如42分钟42米)例如,如果我想在前面的示例中看到日志接近info的消息,我将执行:[root@LinuxEA-172_25_50_250 /data/mirrors]# docker logs -t --since 2019-01-29T09:45:57.679661466Z --until 2019-01-29T09:45:59.740540049Z nginx_repo 2019-01-29T09:45:57.679661466Z 2019-01-29 17:45:57,679 CRIT Server 'unix_http_server' running without any HTTP authentication checking 2019-01-29T09:45:57.679740900Z 2019-01-29 17:45:57,679 INFO supervisord started with pid 1 2019-01-29T09:45:58.683866045Z 2019-01-29 17:45:58,683 INFO spawned: 'nginx' with pid 24 2019-01-29T09:45:58.687228502Z 2019-01-29 17:45:58,686 INFO spawned: 'createrepo' with pid 25 2019-01-29T09:45:58.690025433Z 2019-01-29 17:45:58,689 INFO spawned: 'vsftpd' with pid 26 2019-01-29T09:45:58.738620050Z 2019-01-29 17:45:58,738 INFO exited: vsftpd (exit status 0; not expected) 2019-01-29T09:45:59.740406128Z 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2019-01-29T09:45:59.740444435Z 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2019-01-29T09:45:59.740540049Z 2019-01-29 17:45:59,740 INFO gave up: vsftpd entered FATAL state, too many start retries too quickly组合命令你可以将这些选项和命令组合在一起,以使用你需要的信息来定位日志的特定区域。在下面的示例中,我们将-t timestamps选项与--tail容器日志的最后5行组合nginx_repo,然后在这些行中搜索包含INFO仅查看INFO级别记录的行的行。[root@LinuxEA-172_25_50_250 /data/mirrors]# docker-compose logs --tail 5 nginx_repo|grep INFO nginx_repo | 2019-01-29 17:45:58,689 INFO spawned: 'vsftpd' with pid 26 nginx_repo | 2019-01-29 17:45:58,738 INFO exited: vsftpd (exit status 0; not expected) nginx_repo | 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO gave up: vsftpd entered FATAL state, too many start retries too quickly如果要在所有内容中查找,这里可以替换成all[root@LinuxEA-172_25_50_250 /data/mirrors]# docker-compose logs --tail all nginx_repo|grep INFO nginx_repo | 2019-01-29 17:45:57,679 INFO RPC interface 'supervisor' initialized nginx_repo | 2019-01-29 17:45:57,679 INFO supervisord started with pid 1 nginx_repo | 2019-01-29 17:45:58,683 INFO spawned: 'nginx' with pid 24 nginx_repo | 2019-01-29 17:45:58,686 INFO spawned: 'createrepo' with pid 25 nginx_repo | 2019-01-29 17:45:58,689 INFO spawned: 'vsftpd' with pid 26 nginx_repo | 2019-01-29 17:45:58,738 INFO exited: vsftpd (exit status 0; not expected) nginx_repo | 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO gave up: vsftpd entered FATAL state, too many start retries too quickly将日志写入文件现在你已掌握了docker logs命令以及如何准确找到所需内容,请使用此命令将数据发送到日志文件。使用Bash或替代shell(如Zsh),>>命令后跟文件名输出并将数据保存到该文件。docker-compose logs --tail all nginx_repo|grep INFO >> ./nginx_repo.log你可能希望使用它来为特定日志数据创建日志文件。例如,在调试时,你可以创建警告或错误。docker-compose logs --tail all nginx_repo| grep warning >> logs_warnings.log现在我的nginx_repo.log文件内容包含:nginx_repo | 2019-01-29 17:45:57,679 INFO RPC interface 'supervisor' initialized nginx_repo | 2019-01-29 17:45:57,679 INFO supervisord started with pid 1 nginx_repo | 2019-01-29 17:45:58,683 INFO spawned: 'nginx' with pid 24 nginx_repo | 2019-01-29 17:45:58,686 INFO spawned: 'createrepo' with pid 25 nginx_repo | 2019-01-29 17:45:58,689 INFO spawned: 'vsftpd' with pid 26 nginx_repo | 2019-01-29 17:45:58,738 INFO exited: vsftpd (exit status 0; not expected) nginx_repo | 2019-01-29 17:45:59,739 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO success: createrepo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) nginx_repo | 2019-01-29 17:45:59,740 INFO gave up: vsftpd entered FATAL state, too many start retries too quickly这意味着你可以使用与文本文件一起使用的所有其他应用程序和命令,并将它们应用于此日志数据。为什么不尝试一些自己的自定义日志命令并将输出保存到自己的日志文件中?了解更多使用有针对性的日志数据可以更轻松地开发和调试docker应用程序。例如,你可以在一段时间内搜索特定类型的错误,然后可以将其保存到错误日志文件中。你或许还需要了解:如何从命令行删除docker容器docker命令如何过滤docker容器使用单个命令清理docker镜像,容器和卷学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用Bash命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器
2019年02月08日
4,183 阅读
0 评论
0 点赞
2019-02-07
linuxea:如何使用docker和docker-compose的Entrypoint
Entrypoint设置在运行容器时将首先执行的命令和参数。在本教程中,我将解释Docker的Entrypoint指令如何工作以及如何在Dockerfiles和Docker Compose中使用它。这还将介绍一些最佳实践和想法,以便你了解更多信息。Entrypoint可以做什么Entrypoint设置在运行容器时将首先执行的命令和参数。传递给的任何命令行参数docker run <image>都将附加到entrypoint命令,并将覆盖使用的所有指定元素CMD。例如,docker run <image> bash将命令参数添加bash到入口点的末尾。Dockerfile ENTRYPOINTDockerfiles使用全部大写字母作为入口点指令。有几种方法可以定义它。exec语法该exec的形式是,你所指定的命令和参数作为一个"JSON数组"。这意味着你需要使用双引号而不是单引号。ENTRYPOINT ["executable", "param1", "param2"]使用此语法,Docker将不使用命令shell,这意味着不会发生正常的shell处理。如果需要shell处理功能,则可以使用shell命令启动JSON"数组"。ENTRYPOINT [ "sh", "-c", "echo $HOME" ]使用ENTRYPOINT脚本另一种选择是使用脚本来运行容器的入口点命令。按照惯例,它通常包含名称中的入口点。在此脚本中,你可以设置应用程序以及加载任何配置和环境变量。下面是一个如何使用ENTRYPOINT exec语法在Dockerfile中运行它的示例。COPY ./docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["postgres"]例如,Postgres官方图像使用以下脚本作为其ENTRYPOINT:#!/bin/bash set -e if [ "$1" = 'postgres' ]; then chown -R postgres "$PGDATA" if [ -z "$(ls -A "$PGDATA")" ]; then gosu postgres initdb fi exec gosu postgres "$@" fi exec "$@"我们还可以使用CMD的方式,你可以在linuxea:白话容器之dockerfile CMD/entrypoint详解3(20)中和linuxea:docker run与exec的使用差异查看docker compose entrypoint你在Docker Compose文件中使用的指令是相同的,除了你使用小写字母。entrypoint: /code/entrypoint.sh你还可以在docker-compose.yml中使用列表定义入口点。entrypoint: - php - -d - zend_extension=/usr/local/lib/php/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit覆盖entrypoint你可以使用该--entrypoint标志覆盖入口点指令。docker run --entrypointdocker-compose run --entrypoint语法最佳实践还有EXEC语法,docker允许shell语法两个中另一个有效的选项ENTRYPOINT和CMD。这将以字符串形式执行此命令并执行变量替换。ENTRYPOINT command param1 param2可以阅读Dockerfile这里参考所述*ENTRYPOINT*是以 shell 形式防止任何*CMD*或*run*使用命令行参数覆盖掉,但是具有缺点*ENTRYPOINT*将被开始作为一个子命令*/bin/sh -c*,其不通过信号。这意味着可执行文件不会是容器*PID 1*- 并且不会收到Unix信号 - 因此你的可执行文件将不会收到*SIGTERM*来自*docker stop <container>*这些内容在linuxea:白话容器之dockerfile CMD/entrypoint详解3(20)中提到过相同的问题,可以参考如果*CMD*用于为*ENTRYPOINT*指令提供默认参数,则应使用JSON数组格式指定*CMD*和*ENTRYPOINT*指令。学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用Bash命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器dockerfile
2019年02月07日
6,773 阅读
0 评论
0 点赞
2019-02-06
linuxea:十个初学Dcoker cli指令
Docker是构建微服务的绝佳工具,允许你创建基于云的应用程序和系统。要通过终端充分利用它,这里是终端的前10个Docker命令。通过运行docker启动容器。一个images是一个可执行的包,包括运行一个应用程序的代码所需要的一切,运行时,库,环境变量,和配置文件。容器是images的一个的运行时实例 - 当被执行的时,镜象内的程序就会发生预期变化(即,有状态的images,或者用户进程)。你可以使用该命令查看正在运行的容器列表*docker ps*,就像在Linux中一样。- 来自Docker Conceptsdocker ps - 列出正在运行的容器。一些有用的标志包括:-a/ -all表示所有容器(默认显示刚刚运行)和—-quiet/ -q只列出它们的ID(当你想要获取所有容器时很有用)。docker pull - 大多数images将在Docker Hub注册表的基础images上创建。Docker Hub包含许多预先构建的images,你可以pull尝试而不需要定义和配置自己的images。要下载特定images或一组images(即存储库),请使用docker pull。docker build - 该docker build命令从Dockerfile和“context”构建Docker镜像。构建的上下文是位于指定PATH或中的文件集URL。使用-t标志标注的images,例如docker build -t linuxea_container .用 .在结束使用当前目录下建。docker run - 基于images运行docker容器,你可以使用其他命令执行此操作,例如-it bash从容器中运行bash。另请参阅docker run的前10个选项 - CLI命令的快速参考指南。docker run linuxea_image -it bashdocker logs - 使用此命令显示容器的日志,你必须指定容器并可以使用标志,例如--follow跟踪使用该程序的日志中的输出。docker logs --follow linuxea_containerdocker volume ls - 列出卷,这是保存Docker容器生成和使用的数据的首选机制。docker rm - 删除一个或多个容器。docker rm linuxea_containerdocker rmi - 删除一个或多个images。docker rmi linuxea_imagedocker stop - 停止一个或多个容器。docker stop linuxea_container停止一个容器,同时docker stop $(docker ps -a -q)停止所有正在运行的容器 更直接的方法是使用docker kill linuxea_container,它不会首先优雅地关闭进程。将它们一起使用,例如清理所有docker镜像和容器:杀死所有正在运行的容器 docker kill $(docker ps -q)删除所有已停止的容器 docker rm $(docker ps -a -q)删除所有images docker rmi $(docker images -q)要了解如何更深入地删除容器,请查看:使用单个命令清理Docker镜像,容器和卷了解更多你可以在Docker的CLI文档中了解更多Docker命令,标志和组合。继续尝试,他们应该成为第二天性。学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用Bash命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器
2019年02月06日
2,868 阅读
0 评论
0 点赞
2019-02-05
linuxea:docker run的十个常用选项
docker run的选项大约有100多个,包括-d,-i,-t,-v和-w。在这里将会提出10个最常见的内容,以及了解有关使用它们的更多信息和链接,以下是docker run的介绍示例: docker run \ --rm \ --detach \ --env KEY = VALUE \ --ip 10.10.100.100 \ --publish 9527:9527 \ --volume linuxea_volume \ --name linuxea_container \ --tty --interactive \ --volume /linuxea_volume \ --workdir / app\ IMAGE bashcli命令这基于image创建容器,它使用给定的选项提供的配置在容器中执行这些命令和参数docker run [OPTIONS] IMAGE [COMMAND] [ARG...]ps: 该docker run命令首先creates在指定的图像上写入可写容器层,然后starts使用指定的命令。可参考linuxea:白话容器之docker存储卷概述(16)以及官方文档相似的命令docker run命令类似于docker exec在现有的容器中运行命令,如果要了解这些内容,可以查看:linuxea:docker run与exec的使用差异选项docker run按字母顺序排列的前10个选项。1) --detach, -d默认情况下,Docker容器运行附加到本地标准输入,输出和错误流。该-d, --detach选项在终端会话的后台运行容器,因此不显示其输出。Docker的初学者分离模式中详细介绍了此选项:linuxea:如何在终端的后台运行容器2) --entrypoint设置或覆盖image的默认入口点命令。入口点设置在运行容器时将首先执行的命令和参数。在docker run命令末尾传递的任何命令和参数都将附加到入口点。要了解有关使用Entrypoint的更多信息,请查看linuxea:白话容器之dockerfile CMD/entrypoint详解3(20)3) --env, -e使用一KEY=VALUE对设置环境变量。如果文件中包含环境变量,则可以将文件路径传递给该选项--env-file。4) --ip例如,声明IP地址--ip=10.10.100.100 5) --name为容器指定名称,--name linuxea_container6) --publish, -p | --publish-all, -P这些发布在image的Dockerfile中定义的容器和主机之间的端口映射,或者使用expose选项,--expose。该选项--publish, -p将容器的端口发布到主机,同时--publish-all , -P发布所有公开的端口。可以在linuxea:白话容器之docker的4种端口暴露方式(11)中简单了解端口映射关系,您可以在Expose vs publish中了解有关定义端口和暴露端口的更多信息:简单解释Docker端口命令7) --rm在容器结束时自动退出容器。另一种方法是手动停止然后删除它,有关如何执行此操作的更多信息,请参阅:如何从命令行删除Docker容器8) --tty, -t在容器内分配虚拟终端会话。这通常与选项一起使用--interactive, -i,即使在分离模式(后台运行)下运行也会使STDIN保持打开状态。最常见的用法之一*-i -t*是运行一个命令,例如*bash*,在容器中,你可以在我的帖子中看到更多关于运行bash或Docker容器中的任何命令的信息。9) --volume, -v安装卷-v /my_volume。如果您不熟悉卷,请在Docker的Volumes指南中找到更多信息。10) --workdir , -w说明容器内的工作目录。例如,如果将文件复制到app容器中的文件夹中,则可能需要将工作目录设置为app。学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器
2019年02月05日
3,402 阅读
0 评论
0 点赞
2019-02-04
linuxea:如何从命令行删除docker容器
**docker rm $(docker ps -a -q)** 删除/删除所有已停止的容器当Docker容器运行时,首先需要在删除它们之前停止它们。这个简短的教程将向你展示一些可以在脚本和终端中使用的命令,这些命令可以轻松实现,同时解释了一些可用的选项。停止所有运行的容器: docker stop $(docker ps -a -q)删除所有已停止的容器docker rm $(docker ps -a -q)用于停止一个或多个容器的Docker CLI命令是:docker stop,而删除一个或多个容器的命令是docker rm。你可以通过向它们传递要删除的容器列表来使用它们来停止和删除多个容器。shell语法$()返回括号内执行的任何结果。因此,你可以在其中创建容器列表以传递给stop和rm命令。这是一个细分 docker ps -a -qdocker ps 列出容器-a列出所有容器的选项,甚至是已停止的容器。如果没有这个,它默认只列出正在运行的容器-q quiet选项只提供容器数字ID,而不是整个容器信息表了解更多有更多选项可供选择特定容器以及如何删除它们,我将在以下帖子中更深入地介绍它们:使用单个命令清理Docker镜像,容器和卷如何过滤和grep Docker容器,image和卷学习更多学习如何使用Docker CLI命令,Dockerfile命令,使用Bash命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。docker目录白话容器
2019年02月04日
2,326 阅读
0 评论
0 点赞
1
2
3
4
...
10