看linux下docker安装命令行,linuxea:如何复现查看docker run参数命令

5c1967c5325842cec010c6abd3e07965.gif

如果有这样以一个场景。我使用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.0

I. docker 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

II. 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更漂亮些

III. rekcod

借助rekcod打印出更易读的格式,docker inspect→docker run

docker run从现有容器(via docker inspect)反向设计命令。

rekcod可以将以下任何内容转换为docker run命令:

容器ID /名称(rekcod将调用docker inspect)

包含docker inspect输出的文件的路径

原始JSON(docker inspect直接传递输出)

每个docker run命令都可用于复制容器。

这不是非常强大,但它应该涵盖所需的大多数参数。请参阅下面支持的字段

传递容器ID /名称时,此模块docker inspect直接调用,运行它的用户也应该能够。

5c1967c5325842cec010c6abd3e07965.gif

开始安装

install rekcod

yum 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

开始使用

以使用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

IV. runlike

我仍然要提一下runlike,和rekcod有一样的作用

本地安装使用

yum install python-pip

pip install runlike

用法:

runlike

这打印出你需要运行什么来获得类似的容器。你可以$(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.0

docker使用

runlike被封装为一个名为assaflavie / runlike的Docker镜像。

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \

assaflavie/runlike YOUR-CONTAINER

或者您可以使用别名运行它,例如,将其保存在~/.profile或中~/.bashrc

alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"

然后您可以直接以本地命令运行

runlike YOUR-CONTAINER

V. docker-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

VI. 学习更多

学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。

除非另有说明,否则本站上的内容根据以下许可进行许可: CC署名-非商业性使用-相同方式共享4.0国际许可协议4.0进行许可

本文作者:www.linuxea.com for Mark

文章链接:http://www.linuxea.com/2270.html (转载请注明本文出处和本章链接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值