学习Docker,看这一篇就够了!

    技术2022-07-11  162

    文章目录

    什么是容器什么是DockerDocker的基本组成Docker Client客户端Docker Daemon守护进程Docker Image镜像Docker Container容器Docker Registry仓库共有私有 Docker在线演示地址 Docker的C/S模式Docker的守护进程Docker的远程访问守护进程设置客户端配置 Dcoker的容器容器的基本操作Docker 守护式容器启动守护式容器查看容器日志查看容器内进程在运行中的容器中启动新进程停止守护式容器 在Dokcer中部署静态网站设置容器的端口映射Nginx 部署流程 Docker 镜像列出镜像查看镜像删除镜像查找镜像拉取镜像推送镜像如何在本地构建镜像?Dockerfile指令FROMMAINTAINERRUNEXPOSECMDENTERYPOINTADDCOPYVOLUMEWORKDIRENVUSERONBUILD Dockerfile的构建过程Dockerfile的执行过程构建镜像的中间层调试Dockerfile 的镜像缓存查看镜像的构建过程 Docker容器的网络基础

    什么是容器

    依托于linux内核的虚拟化技术

    什么是Docker

    能够把应用程序自动部署到容器的开源引擎

    Docker的基本组成

    Docker Client客户端

    Docker Daemon守护进程

    Docker Image镜像

    容器的基石

    层叠的只读文件系统

    联合加载

    Docker Container容器

    通过镜像启动

    启动和执行阶段

    写时复制

    Docker Registry仓库

    共有

    Docker Hub

    私有

    Docker在线演示地址

    Docker的C/S模式

    Docker的守护进程

    查看守护进程 ps -ef | grep docker systemctl status docker使用service命令管理 sudo service docker start/stop/restartDocker 的启动选项 docker -d [OPTIONS] 运行相关: -D,–debug=false -e,–exec-driver=‘native’ -g,–graph=’/var/lib/docker’ -icc=true -l,–log-level=‘info’ –label=[] -p,–pidfile=’/var/run/docker.pidDocker服务器连接相关 -G,–group=‘docker’ -H,–host=[] -tls=false -tlsverify=falseRemote API相关 –api-enable-cors=false存储相关 -s,–storage-driver=’’ –selinux-enabled=false –storage-opt=[]Registry 相关 –insecure-registry=[] –registry-mirror=[] 启动配置文件 /etc/default/docker/

    Docker的远程访问

    守护进程设置

    修改配置文件 /etc/default/dcoker DOCKER_OPTS=" --label name=docker_server_1 -H tcp://0.0.0.0:2375" 重启docker service docker resart

    客户端配置

    使用环境变量 export DOCKER_HOST='tcp://ip:端口' (这里的ip是要连接的远程主机IP)

    Dcoker的容器

    容器的基本操作

    启动容器 docker run IMAGE [COMMAND][ARG...] run 在新容器中执行命令 eg : docker run centos echo 'hello world'启动交互式容器 docker run -i -t IMAGE /bin/bash 要开启以下设置 为容器始终打开标准输入 -i --interactive=true|false 默认是false 为创建的容器分配一个tty终端 -t --tty=true|false 默认是false 查看容器 docker ps [-a] [-l] 查看容器的信息 docker inspect ID/NAMES eg: docker inspect 71f344799cfc自定义容器名字 docker run --name=自定义名字 -i -t IMAGE /bin/bash 重新启动已经停止的容器 docker start [-i] 容器名删除容器 docker rm 容器名

    Docker 守护式容器

    什么是守护式容器?

    能够长期运行没有交互式会话适合运行应用程序和服务

    启动守护式容器

    方法1 docker run --name=容器名 -i -t /bin/bash 使用Ctrl + p Q退出,不使用exit 附加到运行中的容器: docker attach 容器名

    方法2 docker run -d 镜像名 [COMMAND] [ARG...]

    查看容器日志

    docker logs [-f] [-t] [--tail] 容器名 -f --follows=true 默认为false -t --timestamps=true 默认为false –tail=“all”

    查看容器内进程

    docker top 容器名

    在运行中的容器中启动新进程

    docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...]

    停止守护式容器

    docker stop 容器名 给运行中的容器发送一个停止信号,等待容器停止后,命令会返回容器的名字。docker kill 容器名 立刻杀死 可以使用man命令查看docker具体命令的详细介绍 例如:`man docker exec`

    在Dokcer中部署静态网站

    设置容器的端口映射

    docker run [-P] 大写P 为容器暴露的所有端口进行映射。端口映射命令: docker run -P -i -t centos /bin/bashdocker run [-p] 指定映射哪些端口 容器端口 containerePort docker run -p 80 -i -t centos /bin/bash宿主机端口:容器端口 HostPort:containerPort docker run -p 8080:80 -i -t centos /bin/bashIP::容器端口 IP:containerPort docker run -p 0.0.0.0:80 -i -t centos /bin/bashIP:宿主机端口:容器端口 ip:HostPort:containerPort docker run -p 0.0.0.0:8080:80 -i -t centos /bin/bash

    Nginx 部署流程

    创建映射80端口的交互式容器 docker run -p 80 --name web -i -t centos /bin/bash安装Nginx yum install nginx安装文本编辑器Vim yum install vim创建静态页面修改Nginx配置文件运行Nginx验证网站访问

    Docker 镜像

    容器的基石

    层叠的只读文件系统

    联合加载技术

    列出镜像

    docker images [OPTIONS] [REPOSITORY]

    -a ,–all=false 显示所有镜像 -f ,–filter=[] –no-trunc=false 不使用截断的方式显示数据 -q, --quiet=false 只显示镜像的唯一ID

    REPOSITORY 一系列镜像的集合 Registry 仓库 是docker镜像的存储服务TAG 镜像的标签。 创建容器时可以指定 镜像标签,不指定默认使用latest

    查看镜像

    docker inspect [OPTIONS] CONTAINER | IMAGE [CONTAINER | IMAGE] 既支持容器的查看,也支持镜像的查看。

    删除镜像

    docker rmi [OPTIONS] IMAGE [IMAGE] ... -f, --force=false –no-prune=false

    查找镜像

    Docker Hub 官网 https://registry.hub.docker.com docker search [OPTIONS] TERM –automated=false–no-trunc=false-s,–stars=0 星级 最低几个星星

    拉取镜像

    docker pull [OPTIONS] NAME [:TAG] -a, --all-tags=false 如果慢的话可以使用国内的docker仓库镜像服务器拉取 使用 --registry-mirror 选项

    修改:/etc/default/docker添加:DOCKER_OPTS="–registry-mirror=http://xxxx" xxx从daocloud获取

    推送镜像

    docker push [REPOSITORY NAME]

    如何在本地构建镜像?

    保存对容器的修改,并再次使用自定义镜像的能力以软件的形式打包并分发服务及其运行环境 docker commit 通过容器构建 docker commit [OPTINOS] CONTAINER [REPOSITORY[:TAG]] -a,–author="" -m,–message="" -p,–pause=true docker build 通过Dockerfile文件构建 创建第一个Dockerfile#First Dockerfile FROM ubuntu:14.04 MAINTAINER liunan "youremail@outlook.com" RUN apt-get update RUN apt-get install nginx EXPOSE 80 创建目录 mkdir -p dockerfile/df_test编写 dockerfile文件 执行 docker build 命令 docker build [OPTIONS] PATH | URL | - –force-rm=false –no-cache=false –pull=false -q,–quiet=false –rm=true -t,–tag="" 指定构建的镜像的名字 使用刚才build 的镜像 docker run -d --name nginx_use_df -p 80 ln/df_test nginx -g "daemon off;"

    Dockerfile指令

    注释 # 指令 命令大写

    FROM

    已经存在的镜像基础镜像必须是第一条非注释的指令 FROM <image> FROM <image>:<tag>

    MAINTAINER

    指定镜像的作者信息,包含镜像的所有者和联系信息

    MAINTAINER liunan "liunan@gmail.com"

    RUN

    指定当前镜像中运行的命令

    RUN (shell模式) /bin/sh -c command RUN echo hello RUN [“executable” ,“param1”,“param2”] (exec模式) RUN ["/bin/bash" , "-c" ,"echo hello"]

    EXPOSE

    指定运行该镜像的容器使用的端口

    EXPOSE <port> [<port> ...]

    使用EXPOSE指定了端口,启动容器的时候 也要指定端口 docker run -p 80 -d youimages nginx -g "daemon off;"

    CMD

    指定在容器运行时执行的命令

    ENTERYPOINT

    指定在容器运行时执行的命令

    ADD

    设置镜像的目录文件 ADD包含类似tar的解压功能

    COPY

    设置镜像的目录文件 如果单纯的复制文件,Docker推荐使用COPY

    VOLUME

    设置镜像的目录文件 VOLUME["/data"]

    WORKDIR

    镜像在构建 及 运行时的环境设置

    WORKDIR /path/to/workdir

    ENV

    镜像在构建 及 运行时的环境设置

    ENV<key><value> ENV<key>=<value>....

    USER

    镜像以什么样的用户运行

    USER daemon USER nginx (使用哪个用户启动docker) USER user:group USER user:gid

    ONBUILD

    镜像触发器 当一个镜像被其他镜像作为基础镜像时执行 会在构建过程中插入指令

    Dockerfile的构建过程

    Dockerfile的执行过程

    从基础镜像运行一个容器执行一条指令,对容器作出修改执行类似 docker commit 的操作,提交一个新的镜像层再基于刚提交的镜像运行一个新容器执行 Dockerfile 中的下一条指令,直至所有指令执行完毕

    构建镜像的中间层调试

    以上步骤中,中间层容器会在执行完后删除,但中间层镜像不会被删除。 中间层镜像的优点:

    使用中间层镜像进行调试查找错误

    Dockerfile 的镜像缓存

    Dockerfile构建过程中可以 构建缓存

    构建缓存 use cache不使用缓存$ docker build --no-cache # 在 dockerfile 文件中 添加 ENV REFRESH_DATE 2015-04-01 # 利用环境变量标记 缓存刷新的时间 这句命令后面的语句不会使用缓存

    查看镜像的构建过程

    $ docker history [image]

    Docker容器的网络基础

    Liunx 虚拟网桥特点 可以设置IP地址相当于拥有一个隐藏的虚拟网卡 # 安装网桥管理工具 sudo yum install bridge-utils sudo brctl show
    Processed: 0.021, SQL: 12