导图社区 docker
docker详细介绍,包括基本概念/使用/原理。
编辑于2019-07-06 11:35:09docker
glossary(术语)
image(镜像)
container(容器)
diff(区别/联系)
容器 = 镜像 + 读写层
容器 = 程序;镜像 = 进程
容器 = 类;镜像 = 对象
respository(仓库)
public(共有仓库)
private(私有仓库)
host(宿主)
feature(特性)
环境版本化
格式:<仓库名>:<标签>
服务隔离(沙箱)
principle(原理)
分层结构
commander
子主题
子主题
distribution(发行版)
CE(社区版)
免费
EE(企业版)
install
permission
由于 docker 守护进程启动的时候,会默认赋予名字为 docker 的用户组读写 Unix socket 的权限,因此只要创建 docker 用户组,并将当前用户加入到 docker 用户组中,那么当前用户就有权限访问 Unix socket 了,进而也就可以执行 docker 相关命令了。 我们可以使用如下命令解决问题:sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 docker ps #测试docker命令是否可以使用sudo正常使用
C/S架构
client(docker CLI)
server(daemon)
负责构建、运行和分发 Docker 镜像
监听
localhost
remote
编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service ,在环境变量 ExecStart后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接 [service]Type=notifyExceStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0EndReload=/bin/kill -s HUP $MAINPID docker -H 服务器IP地址 info #与远程服务器通信
子主题
子主题
其他
systemctl status docker.service(查看docker服务状态)
创建镜像
从无到有开始创建镜像
子主下载并使用别人创建好的现成的镜像题
子主在现有镜像上创建新的镜像题
dockerfile
comander
FROM
同一个 Dockerfile 中多次使用 FROM 命令用于创建多个镜像
MAINTAINER
COPY
是用于复制本地主机的 <src> (为 Dockerfile 所在目录的相对路径)到容器中的 <dest>
WORKDIR
WORKDIR 用于配合 RUN,CMD,ENTRYPOINT 命令设置当前工作路径。可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令。默认路径为/。一般格式为 WORKDIR /path/to/work/dir 。
RUN
RUN 用于容器内部执行命令
EXPOSE
EXPOSE 命令用来指定对外开放的端口
ENTERPOINT
ENTRYPOINT 可以让你的容器表现得像一个可执行程序一样。一个 Dockerfile 中只能有一个 ENTRYPOINT,如果有多个,则最后一个生效 ENTRYPOINT 命令也有两种格式:ENTRYPOINT ["executable", "param1", "param2"] :推荐使用的 exec形式ENTRYPOINT command param1 param2 :shell 形式
CMD
CMD 命令用于启动容器时默认执行的命令,CMD 命令可以包含可执行文件,也可以不包含可执行文件。不包含可执行文件的情况下就要用 ENTRYPOINT 指定一个,然后 CMD 命令的参数就会作为ENTRYPOINT的参数。CMD 命令有三种格式:CMD ["executable","param1","param2"]:推荐使用的 exec 形式。CMD ["param1","param2"]:无可执行程序形式CMD command param1 param2:shell 形式。一个 Dockerfile 中只能有一个CMD,如果有多个,则最后一个生效。而 CMD 的 shell 形式默认调用 /bin/sh -c 执行命令。CMD 命令会被 Docker 命令行传入的参数覆盖:docker run busybox /bin/echo Hello Docker 会把 CMD 里的命令覆盖。
examples
python flask app
FROM python:2.7MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>COPY . /appWORKDIR /appRUN pip install -r requirements.txtEXPOSE 5000ENTRYPOINT ["python"]CMD ["app.py"] 1、从 Docker Hub 上 pull 下 python 2.7 的基础镜像2、显示维护者的信息3、copy 当前目录到容器中的 /app 目录下 复制本地主机的 <src> ( Dockerfile 所在目录的相对路径)到容器里 <dest>4、指定工作路径为 /app5、安装依赖包6、暴露 5000 端口 7、启动 app
nginx-simple
构建Dockerfile我们大体已经把Dockerfile的写法讲述完毕,我们可以自己动手写一个例子: mkdir static_webcd static_webtouch Dockerfile然后 vi Dockerfile 开始编辑该文件输入 i 开始编辑 以下是我们构建的Dockerfile内容``````````FROM nginxMAINTAINER Angel_Kitty <angelkitty6698@gmail.com>RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html`````````` 编辑完后 按 esc 退出编辑然后 :wq 写入 退出 我们在 Dockerfile 文件所在目录执行:docker build -t angelkitty/nginx_web:v1 . 我们解释一下, -t 是为新镜像设置仓库和名称,其中 angelkitty 为仓库名, nginx_web 为镜像名, :v1为标签(不添加为默认 latest )我们构建完成之后,使用 docker images 命令查看所有镜像,如果存在 REPOSITORY 为 nginx 和 TAG 是 v1 的信息,就表示构建成功。接下来使用 docker run 命令来启动容: docker run --name nginx_web -d -p 8080:80 angelkitty/nginx_web:v1这条命令会用 nginx 镜像启动一个容器,命名为 nginx_web ,并且映射了 8080 端口,这样我们可以用浏览器去访问这个 nginx 服务器:http://localhost:8080/ 或者 http://本机的IP地址:8080/,页面返回信息: Hello Docker!
资料
参考
子主题
常用镜像
nginx