docker网址php
docker介绍html
docker安装java
docker使用linux
docker的使用命令nginx
使用命令git
rungithub
详细参数配置web
docker详细使用docker
docker基本信息shell
docker hub:https://hub.docker.com/
经常使用官网docs:https://docs.docker.com/
虚拟化使得许多操做系统可同时在单个系统上运行。
容器则可共享同一个操做系统内核,将应用进程与系统其余部分隔离开。
普通虚拟化技术和Docker的对比图
传统的 Linux 容器使用 init 系统来管理多种进程。这意味着,全部应用程序都做为一个总体运行。与此相反,Docker 技术鼓励应用程序各自独立运行其进程,并提供相应工具以实现这一功能。这种精细化运做模式自有其优点。
如下是centos版本
官网安装指导:https://docs.docker.com/install/linux/docker-ce/centos/
# 如下亲测有效,20190308版。
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
[root@localhost ~]# docker version
Client:
Version: 18.09.3
API version: 1.39
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:33:21 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.3
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:02:24 2019
OS/Arch: linux/amd64
Experimental: false
增长开机启动
chkconfig docker on
实测有效。
添加镜像加速器
阿里镜像加速器网址:https://cr.console.aliyun.com/cn-hangzhou/mirrors 可加快连接docker官网镜像的速度 教程: 1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您能够经过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
实测有效。
补充:
删除none的image docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm docker images|grep none|awk '{print $3 }'|xargs docker rmi
docker --help 管理命令: container 管理容器 image 管理镜像 network 管理网络 命令: attach 介入到一个正在运行的容器 build 根据 Dockerfile 构建一个镜像 commit 根据容器的更改建立一个新的镜像 cp 在本地文件系统与容器中复制 文件/文件夹
# 从主机复制到容器sudo docker cp host_path containerID:container_path
# 从容器复制到主机sudo docker cp containerID:container_path host_path
create 建立一个新容器 exec 在容器中执行一条命令 images 列出镜像 kill 杀死一个或多个正在运行的容器 logs 取得容器的日志 pause 暂停一个或多个容器的全部进程 ps 列出全部容器 pull 拉取一个镜像或仓库到 registry push 推送一个镜像或仓库到 registry rename 重命名一个容器 restart 从新启动一个或多个容器 rm 删除一个或多个容器 rmi 删除一个或多个镜像 run 在一个新的容器中执行一条命令 search 在 Docker Hub 中搜索镜像 start 启动一个或多个已经中止运行的容器 stats 显示一个容器的实时资源占用 stop 中止一个或多个正在运行的容器 tag 为镜像建立一个新的标签 top 显示一个容器内的全部进程 unpause 恢复一个或多个容器内全部被暂停的进程
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d, --detach=false 指定容器运行于前台仍是后台,默认为false -i, --interactive=false 打开STDIN,用于控制台交互 -t, --tty=false 分配tty设备,该能够支持终端登陆,默认为false -u, --user="" 指定容器的用户 -a, --attach=[] 登陆容器(必须是以docker run -d启动的容器) -w, --workdir="" 指定容器的工做目录 -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用 -e, --env=[] 指定环境变量,容器中可使用该环境变量 -m, --memory="" 指定容器的内存上限 -P, --publish-all=false 指定容器暴露的端口 -p, --publish=[] 指定容器暴露的端口 -h, --hostname="" 指定容器的主机名 -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录 --volumes-from=[] 给容器挂载其余容器上的卷,挂载到容器的某个目录 --cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities --cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法 --cpuset="" 设置容器可使用哪些CPU,此参数能够用来容器独占CPU --device=[] 添加主机设备给容器,至关于设备直通 --dns=[] 指定容器的dns服务器 --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件 --entrypoint="" 覆盖image的入口点 --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量 --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口 --link=[] 指定容器间的关联,使用其余容器的IP、env等信息 --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用 --name="" 指定容器名字,后续能够经过名字进行容器管理,links特性须要使用名字 --net="bridge" 容器网络设置: bridge 使用docker daemon指定的网桥 host //容器使用主机的网络 container:NAME_or_ID >//使用其余容器的网路,共享IP和PORT等网络资源 none 容器使用本身的网络(相似--net=bridge),可是不进行配置 --privileged=false 指定容器是否为特权容器,特权容器拥有全部的capabilities --restart="no" 指定容器中止后的重启策略: no:容器退出时不重启 on-failure:容器故障退出(返回值非零)时重启 always:容器退出时老是重启 --rm=false 指定容器中止后自动删除容器(不支持以docker run -d启动的容器) --sig-proxy=true 设置由代理接受并处理信号,可是SIGCHLD、SIGSTOP和SIGKILL不能被代理
参数 | 解释 |
---|---|
--api-enable-cors=false | 开放远程API调用的 CORS 头信息。这个接口开关对想进行二次开发的上层应用提供了支持. |
-b, --bridge="" | 挂载已经存在的网桥设备到 Docker 容器里。注意,使用 none 能够停用容器里的网络. |
--bip="" | 使用 CIDR 地址来设定网络桥的 IP。注意,此参数和 -b 不能一块儿使用. |
-D, --debug=false | 开启Debug模式。例如:docker -d -D |
-d, --daemon=false | 开启Daemon模式. |
--dns=[] | 强制容器使用DNS服务器.例如: docker -d --dns 8.8.8.8 |
--dns-search=[] | 强制容器使用指定的DNS搜索域名.例如: docker -d --dns-search example.com |
-e, --exec-driver="native" | 强制容器使用指定的运行时驱动.例如:docker -d -e lxc |
-G, --group="docker" | 在后台运行模式下,赋予指定的Group到相应的unix socket上。注意,当此参数 --group 赋予空字符串时,将去除组信息。 |
-g, --graph="/var/lib/docker" | 配置Docker运行时根目录 |
-H, --host=[] | 在后台模式下指定socket绑定,能够绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如:$ docker -H tcp://0.0.0.0:2375 ps 或者 $ export DOCKER_HOST="tcp://0.0.0.0:2375" $ docker ps |
--icc=true | 启用内联容器的通讯. |
--ip="0.0.0.0" | 容器绑定IP时使用的默认IP地址. |
--ip-forward=true | 启动容器的 net.ipv4.ip_forward. |
--iptables=true | 启动Docker容器自定义的iptable规则. |
--mtu=0 | 设置容器网络的MTU值,若是没有这个参数,选用默认 route MTU,若是没有默认route,就设置成常量值 1500. |
-p, --pidfile="/var/run/docker.pid" | 后台进程PID文件路径. |
-r, --restart=true | 重启以前运行中的容器. |
-s, --storage-driver="" | 强制容器运行时使用指定的存储驱动,例如,指定使用devicemapper, 能够这样:docker -d -s devicemapper |
--selinux-enabled=false | 启用selinux支持 |
--storage-opt=[] | 配置存储驱动的参数 |
--tls=false | 启动TLS认证开关 |
--tlscacert="/Users/dxiao/.docker/ca.pem" | 经过CA认证过的的certificate文件路径 |
--tlscert="/Users/dxiao/.docker/cert.pem" | TLS的certificate文件路径 |
--tlskey="/Users/dxiao/.docker/key.pem" | TLS的key文件路径 |
--tlsverify=false | 使用TLS并作后台进程与客户端通信的验证 |
-v, --version=false | 显示版本信息 |
*注意:其中带有[] 的启动参数能够指定屡次,例如
docker run -a stdin -a stdout -a stderr -i -t ubuntu /bin/bash
uname -r | 查看系统内核 |
systemctl start docker | 启动docker 境像 |
docker verison | 查看docker版本 |
docker info | 显示docker系统的信息 |
docker search image-name | 检索image |
docker pull image-name | 下载image |
docker images | 列出镜像列表 |
docker rmi image-name | 删除一个或者多个镜像 |
docker history image-name | 显示一个镜像的历史 |
*从已经建立的容器中更新镜像,而且提交这个镜像 *使用 Dockerfile 指令来建立一个新的镜像 下面经过已存在的容器建立一个新的镜像。 上面命令参数说明: 1.在Docker 注册帐户,发布的镜像都在这个页面里展现 3.登陆docker 4.上传unbantu镜像 |
经过容器建立镜像 |
docker run image-name apt-get install -y -name | 在容器中安装新的程序 |
docker run image-name echo "hello word" | 在容器中运行"echo"命令,输出"hello word" |
docker run -i -t image_name /bin/bash |
交互式进入容器中 |
docker ps | 列出当前全部正在运行的container |
docker ps -a | 列出全部的container |
docker ps -l | 列出最近一次启动的container |
docker commit ID new-image-name |
保存对容器的修改 当你对某一个容器作了修改以后(经过在容器中运行某一个命令),能够把对容器的修改保存下来,这样下次能够从保存后的最新状态运行该容器。 |
docker rm `docker ps -a -q` | 删除全部容器 |
docker rm Name/ID |
删除单个容器 |
docker stop Name/ID |
中止、启动、杀死一个容器 |
docker logs Name/ID |
从一个容器中取日志 |
docker diff Name/ID | 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增长的,D 删除的,C 被改变的 |
docker top Name/ID | 显示一个运行的容器里面的进程信息 |
docker cp Name:/container-path to-path |
从容器里面拷贝文件/目录到本地一个路径 |
docker restart Name/ID |
重启一个正在运行的容器 |
docker attach ID #从新启动并运行一个交互式会话shell |
附加到一个运行的容器上面 |
docker save image-name -o file-path |
保存镜像到一个tar包 |
docker load -i file-path |
加载一个tar包格式的镜像 |
docker save image-name > /home/keke/main.tar *使用scp将main.tar拷到机器A上: |
从机器A拷贝到机器B |
docker login |
登录registry server |
docker push new-image-name | 发布docker镜像 |
docker build命令会根据Dockerfile文件及上下文构建新Docker镜像。构建上下文是指Dockerfile所在的本地路径或一个URL(Git仓库地址)。构建上下文环境会被递归处理,因此,构建所指定的路径还包括了子目录,而URL还包括了其中指定的子模块。
将当前目录作为构建上下文时,能够像下面这样使用docker build命令构建镜像:
$ ~/Downloads/hello-system$ sudo docker build . Sending build context to Docker daemon 70.14kB
说明:构建会在Docker后台守护进程(daemon)中执行,而不是CLI中。构建前,构建进程会将所有内容(递归)发送到守护进程。大多状况下,应该将一个空目录做为构建上下文环境,并将Dockerfile文件放在该目录下。
在构建上下文中使用的Dockerfile文件,是一个构建指令文件。为了提升构建性能,能够经过.dockerignore文件排除上下文目录下,不须要的文件和目录。
Dockerfile通常位于构建上下文的根目录下,也能够经过-f指定该文件的位置:
$ sudo docker build -f /home/keke/Downloads/hello-system/Dockerfile .
构建时,还能够经过-t参数指定构建成后,镜像的仓库,标签等:
$ ~/Downloads/hello-system$ sudo docker build -t keke/myapp .
若是存在多个仓库下,或使用多个镜像标签,就可使用多个-t参数:
$ docker build -t keke/myapp:1.0.2 -t keke/myapp:latest .
在Docker守护进程执行Dockerfile中的指令前,首先会对Dockerfile进行语法检查,有语法错误时会返回:
$ docker build -t test/myapp . Sending build context to Docker daemon 2.048 kB Error response from daemon: Unknown instruction: RUNCMD
Docker 会依次执行Dockerfile中的指令,文件中的第一条指令必须是FROM,FROM指令用于指定一个基础镜像。
FROM指令用于指定其后构建新镜像所使用的基础镜像。FROM指令必是Dockerfile文件中的首条命令,启动构建流程后,Docker将会基于该镜像构建新镜像,FROM后的命令也会基于这个基础镜像。
Dockerfile文件格式以下:
# Comment INSTRUCTION arguments
Dockerfile文件中指令不区分大小写,但为了更易区分,约定使用大写形式。
Docker 会依次执行Dockerfile中的指令,文件中的第一条指令必须是FROM,FROM指令用于指定一个基础镜像。
FROM <image> 或 FROM <image>:<tag>
经过FROM指定的镜像,能够是任何有效的基础镜像。FROM有如下限制:
FROM必须是Dockerfile中第一条非注释命令 在一个Dockerfile文件中建立多个镜像时,FROM能够屡次出现。只需在每一个新命令FROM以前,记录提交上次的镜像ID。 tag或digest是可选的,若是不使用这两个值时,会使用latest版本的基础镜像
RUN <command>
exec执行
RUN ["executable", "param1", "param2"]
RUN能够执行任何命令,而后在当前镜像上建立一个新层并提交。提交后的结果镜像将会用在Dockerfile文件的下一步。
经过RUN执行多条命令时,能够经过\换行执行:
RUN /bin/bash -c 'source $HOME/.bashrc; \ echo $HOME'
也能够在同一行中,经过分号分隔命令:
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
RUN指令建立的中间镜像会被缓存,并会在下次构建中使用。若是不想使用这些缓存镜像,能够在构建时指定--no-cache参数,如:docker build --no-cache。
CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2
CMD不一样于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。 CMD与RUN在功能实现上也有类似之处。如:
docker run -t -i keke/static /bin/true 等价于:cmd ["/bin/true"]
CMD在Dockerfile文件中仅可指定一次,指定屡次时,会覆盖前的指令。 另外,docker run命令也会覆盖Dockerfile中CMD命令。若是docker run运行容器时,使用了Dockerfile中CMD相同的命令,就会覆盖Dockerfile中的CMD命令。 如,咱们在构建镜像的Dockerfile文件中使用了以下指令:
CMD ["/bin/bash"]
使用docker build构建一个新镜像,镜像名为keke/test。构建完成后,使用这个镜像运行一个新容器,运行效果以下:
sudo docker run -i -t keke/test
在使用docker run运行容器时,咱们并无在命令结尾指定会在容器中执行的命令,这时Docker就会执行在Dockerfile的CMD中指定的命令。 若是不想使用CMD中指定的命令,就能够在docker run命令的结尾指定所要运行的命令:
sudo docker run -i -t keke/test /bin/ps
这时,docker run结尾指定的/bin/ps命令覆盖了Dockerfile的CMD中指定的命令.
ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2
ENTRYPOINT与CMD很是相似,不一样的是经过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当作参数再次传递给ENTRYPOINT。Dockerfile中只容许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。 docker run运行容器时指定的参数都会被传递给ENTRYPOINT,且会覆盖CMD命令指定的参数。如,执行docker run -d时, -d参数将被传递给入口点。也能够经过docker run --entrypoint重写ENTRYPOINT入口点。 如:能够像下面这样指定一个容器执行程序:
ENTRYPOINT ["/usr/bin/nginx"]
完整构建代码:
FROM ... MAINTAINER keke "2536495681@gmail.com" RUN ... # 指定容器内的程序将会使用容器的指定端口 # 配合 docker run -p EXPOSE ...
使用docker build构建镜像,并将镜像指定为keke/test:
sudo docker build -t="itbilu/test" .
构建完成后,使用keke/test启动一个容器:
sudo docker run -i -t keke/test -g "daemon off;"
在运行容器时,咱们使用了-g "daemon off;" ,这个参数将会被传递给ENTRYPOINT,最终在容器中执行的命令为/usr/sbin/nginx -g "daemon off;" 。
EXPOSE <port> [<port>...]
EXPOSE并不会让容器的端口访问到主机。要使其可访问,须要在docker run运行容器时经过-p来发布这些端口,或经过-P参数来发布EXPOSE导出的全部端口。
docker history images-name
dockerfile主要组成部分:
基础镜像信息 FROM centos:6.8
制做镜像操做指令RUN yum insatll openssh-server -y
容器启动时执行指令 CMD ["/bin/bash"]
dockerfile经常使用指令:
FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,能够没有)
RUN 你想让它干啥(在命令前面加上RUN便可)
ADD 给它点创业资金(COPY文件,会自动解压)
WORKDIR 我是cd,今天刚化了妆(设置当前工做目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)
dockerfile其余指令:
COPY 复制文件
ENV 环境变量
ENTRYPOINT 容器启动后执行的命令
(1)FROM(指定基础image)
构建指令,必须指定且须要在Dockerfile其余指令的前面。后续的指令都依赖于该指令指定的image。FROM指令指定的基础image能够是官方远程仓库中的,也能够位于本地仓库。镜像能够指定标签。格式:
FROM <image>:<tag>
(2)MAINTAINER(用来指定镜像建立者信息)
构建指令,用于将image的制做者相关的信息写入到image中。当咱们对该image执行docker inspect命令时,输出中有相应的字段记录该信息。
格式:
MAINTAINER <name>
(3)RUN
构建指令,RUN能够运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。RUN指令能够有多条,每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时,能够用\来换行。
该指令有两种格式:
# 在shell终端中运行 - `/bin/sh -c` RUN <command> # 使用exec执行 RUN ["executable", "param1", "param2" ... ]
(4)CMD(设置容器启动时执行的操做)
设置指令,用于容器启动时指定的操做。该操做能够是执行自定义脚本,也能够是执行系统命令。该指令只能在文件中存在一次,若是有多个,则只执行最后一条。
该指令有三种格式:
# 格式一:like an exec, this is the preferred form CMD ["executable","param1","param2"] # 格式二:as a shell CMD command param1 param2 # 当Dockerfile指定了ENTRYPOINT,那么使用下面的格式:做为ENTRYPOINT的缺省参数 CMD ["param1","param2"]
注意:
1) CMD运行在镜像构建以后,容器启动的时候;
2) CMD只执行最后一条
3) CMD能够被用户指定的命令覆盖
(5)ENTRYPOINT(设置容器启动时执行的操做)
设置指令,指定容器启动时执行的命令,能够屡次设置,可是只有最后一个有效。
两种格式:
# 格式一:like an exec, this is the preferred form ENTRYPOINT ["executable", "param1", "param2"] # 格式二:as a shell ENTRYPOINT command param1 param2
该指令的使用分为两种状况,一种是独自使用,另外一种和CMD指令配合使用。
当独自使用时,若是你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效:
# CMD指令将不会被执行,只有ENTRYPOINT指令被执行 CMD echo “Hello, World!” ENTRYPOINT ls -l
另外一种用法和CMD指令配合使用来指定ENTRYPOINT的默认参数,这时CMD指令不是一个完整的可执行命令,仅仅是参数部分;ENTRYPOINT指令只能使用JSON方式指定执行命令,而不能指定参数:
FROM ubuntu CMD ["-l"] ENTRYPOINT ["/usr/bin/ls"]
注意:
1) 和CMD指令基本同样,可是不能被用户指定的命令所覆盖;
2) 能够和CMD组合使用,ENTRYPOINT提供不可变得命令,CMD提供缺省参数。
(6)USER(设置容器的用户)
设置指令,设置启动容器的用户,默认是root用户。
# 指定memcached的运行用户 ENTRYPOINT ["memcached"] USER daemon # 或 ENTRYPOINT ["memcached", "-u", "daemon"]
(7)EXPOSE(指定容器须要映射到宿主机器的端口)
设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。格式为:
EXPOSE <port> [<port> ...] 例如: EXPOSE 80 443 11211
告诉Docker服务端容器暴露的端口号,供互联系统使用。在启动容器时须要经过-P,Docker主机会自动分配一个端口转发到指定的端口;使用-p,则能够具体指定哪一个本地端口映射过来。
(8)ENV(用于设置环境变量)
构建指令,在image中设置一个环境变量。格式:
ENV <key> <value>
设置了后,后续的RUN命令均可以使用,容器启动后,能够经过docker inspect
查看这个环境变量,也能够经过在docker run --env key=value
时设置或修改环境变量。
假如你安装了JAVA程序,须要设置JAVA_HOME
,那么能够在Dockerfile中这样写:
ENV JAVA_HOME /path/to/java/dirent
(9)ADD(从src复制文件到容器的dest路径)
构建指令,全部拷贝到容器中的文件和文件夹权限为0755,uid和gid为0。格式为:
ADD <src> <dest> <src> 是相对被构建的源目录的相对路径,能够是文件或目录的路径,也能够是一个远程的文件url;<dest>是容器中的绝对路径。 该命令将复制指定的<src>到容器中的<dest>。其中<src>能够是Dockerfile所在目录的一个相对路径(文件或目录);也能够是一个URL;还能够是一个tar文件(自动解压为目录)。 若是是一个目录,那么会将该目录下的全部文件添加到容器中,不包括目录;若是文件是可识别的压缩格式,则docker会帮忙解压缩(注意压缩格式);若是<src>是文件且<dest>中不使用斜杠结束,则会将<dest>视为文件,<src>的内容会写入<dest>;若是<src>是文件且<dest>中使用斜杠结束,则会<src>文件拷贝到<dest>目录下。
(10)COPY
格式为
COPY <src> <dest>
复制本地主机的<src>
(为Dockerfile所在目录的相对路径,文件或目录)为容器中的<dest>
。目标路径不存在时,会自动建立。
当使用本地目录为源目录时,推荐使用COPY。
(11)VOLUME(指定挂载点))
设置指令,使容器中的一个目录具备持久化存储数据的功能,该目录能够被容器自己使用,也能够共享给其余容器使用。咱们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,全部的更改都会丢失。当容器中的应用有持久化数据的需求时能够在Dockerfile中使用该指令。格式:
VOLUME ["<mountpoint>"]
示例:
FROM base VOLUME ["/tmp/data"]
运行经过该Dockerfile生成image的容器,/tmp/data
目录中的数据在容器关闭后,里面的数据还存在。例如另外一个容器也有持久化数据的需求,且想使用上面容器共享的/tmp/data
目录,那么能够运行下面的命令启动一个容器:
docker run -t -i -rm -volumes-from container1 image2 bash
# container1为第一个容器的ID,image2为第二个容器运行image的名字。
(12)WORKDIR(切换目录)
设置指令,能够屡次切换(至关于cd命令),对RUN,CMD,ENTRYPOINT生效。格式:
WORKDIR /path/to/workdir 示例: # 在 /p1/p2 下执行 vim a.txt WORKDIR /p1 WORKDIR p2 RUN vim a.txt
(13)ONBUILD(在子镜像中执行)
ONBUILD <Dockerfile关键字> # ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。
(14)ARG(指定构建过程当中使用的环境变量)
ARG buildno ARG password RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"
docker run -d -p 4000:80 --name [name] #能够在 Dokcer 宿主机上指定一个具体的端口映射到容器的80端口上
docker run -d container-name #建立守护容器 docker top container-name #查看容器内进程 docker exec container-name touch a.txt #在容器内部运行进程 docker stop container-name #中止容器
docker login时出现问题以下: Error saving credentials: error storing credentials - err: exit status 1, out: `The connection is closed` 解决方案: sudo apt install gnupg2 pass
https://www.cnblogs.com/52fhy/p/5638571.html
https://github.com/KeKe-Li/docker-directive
https://www.cnblogs.com/52fhy/p/5638571.html