Docker学习笔记


Docker学习笔记

嗨还害,我林风又TM来啦!今天来分享以下我的Docker笔记。

Tips:

本文较长,加载时间可能也会比较长

推荐使用PC端查看,因为有目录

理论知识

这里不多啰嗦了,像什么是Docker之类的我就不写了。

  • daemon:守护进程。独立的进程。作用接收客户端传递过来的命令。
  • image:镜像。镜像中包含了一些已经安装好的软件,并存放在互联网服务器中。可以通过命令下载下来,存到本地docker。
  • container:容器。必须通过镜像产生。

containerkənˈteɪnər 容器

安装Docker

Docker的安装有多种,这里只提供两种方式安装

rpm安装

  • rpm资源下载

    可以到官网复制地址使用wget下载,或者直接从我这里下载:http://linfeng.vip:11119/s/6VIk 密码:24568

  • 安装Container-io

    安装container-io,由于container-io需要秘钥,所以需要使用yum安装方式。

    所有安装步骤都是有顺序的,顺序乱了,无法安装。

    # 在你上传好文件的目录下使用下面命令
    yum localinstall containerd.io-1.2.6-3.3.fc30.x86_64.rpm
  • 安装Docker相关三个rpm

    三个安装过程中不要使用yum localinstall,有相互依赖关系,自动下载。

    # 安装Docker-Ce的依赖
    rpm -ivh libcgroup-0.41-19.el8.x86_64.rpm
    # 安装Docker客户端
    rpm -ivh docker-ce-cli-19.03.13-3.el8.x86_64.rpm
    # 安装Docker-ce
    rpm -ivh docker-ce-19.03.13-3.el8.x86_64.rpm

yum安装

  • 为本地yum提供远程repo信息

    curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  • 安装依赖

    yum install -y  https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
  • 安装docker-ce

    yum install -y docker-ce

启动Docker

# 开启Docker服务
systemctl start docker
# 设置Docker服务开机自启
systemctl enable docker

检查Docker状态

Docker安装成功了吗?不知道?可以用下面命令来查看docker状态

docker info

然后如果出现一大坨Docker的信息代表安装成功,其中还可以查看Docker版本Server Version: 19.03.13

阿里云镜像加速

默认情况下Docker从Docker Hub上下载镜像资源,但速度很慢,可以通过配置国内的镜像加速器来解决。

  • 访问阿里云
  • 搜索ACR或容器镜像服务并进入该服务的控制台
  • 点击镜像工具,然后点击镜像加速器
  • 选择CentOS,将配置镜像加速器下的命令复制到服务器中执行即可

检测加速

如何验证是否成功换成阿里云的了?很简单,还记得刚刚提到的Docker查看状态命令吗?

docker info

对就是这个命令,然后找到Registry Mirrors,看下下面的链接是否为阿里云的即可

镜像操作命令

  • 搜索镜像

    docker search 镜像名称
  • 下载镜像

    docker pull 镜像名称:tag

    tag:版本,可省略,省略默认为最新版lastest

  • 查看本机镜像

    docker images
  • 删除镜像

    docker rmi 镜像名:tag|镜像id

容器操作命令

  • 根据镜像创建容器(不启动)

    docker create --name 自定义容器名 -p 外部端口:内部端口 [-e 参数名=参数值] 镜像名:tag
    • 外部端口:docker软件占用宿主的端口。当服务器外部通过这个端口访问服务器时,docker监听这个端口,把请求转发给容器内部端口。
    • 内部端口:占用容器的端口
    • 参数:并不是所有的容器都有参数。但是MySQL镜像要求必须有参数 MYSQL_ROOT_PASSWORD=root的密码
    • –name:容器名不能重名
  • 创建并启动容器

    docker run --name 自定义名称 -p 外部端口:内部端口  [-e 参数名=参数值] -d  镜像名:tag
    • -d:后台启动,不占用光标
  • 可用参数说明

    docker run --help
    -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特性需要使用名字
    	--network="bridge"         容器网络设置:
    	                              bridge 使用docker daemon指定的网桥
    	                              host    //容器使用主机的网络
    	                              container:NAME_or_ID  >//使用其他容器的网路,共享IP和PORT等网络资源
    	                              none 容器使用自己的网络(类似--net=bridge),但是不进行配置
    	--privileged=false         指定容器是否为特权容器,特权容器拥有所有root权限
    	--restart="no"             指定容器停止后的重启策略:
    	                              no:容器退出时不重启
    	                              on-failure:容器故障退出(返回值非零)时重启
    	                              always:容器退出时总是重启
    	--rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
    	--sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
  • 启动容器

    docker start 容器名
  • 停止容器

    docker stop 容器名
  • 重启容器

    docker restart 容器名
  • 暂停容器

    docker pause 容器名
  • 恢复容器

    docker unpause 容器名
  • 查看启动着的容器

    docker container ls
  • 查看被创建的容器

    docker container ls -a
  • 删除容器

    docker rm 容器名

    容器必须处理关闭状态才能删除

  • 查看容器状态

    • 查看容器内部进程

      docker top 容器名

      使用这个命令查看容器内部有什么软件在运行。

    • 查看容器内部详情

      docker inspect 容器名

      docker的运维人员使用较多。

    • 查看容器日志

      docker logs -f 容器名

      查看容器内部日志,多用在启动容器内软件出现问题时。

  • 进入容器内部(经常使用)

    docker exec -it 容器名 /bin/bash
    • exec 进入容器命令
    • -it 新启动一个终端(命令行)
    • /bin/bash 文件路径,运行的文件。代表的是命令行。

Docker资源共享

宿主和容器之间有共享目录

称为:数据卷管理

语法:拆功能键容器时添加

-v 宿主目录:容器目录

注意:

-v 称为 挂载

创建容器时可以有多组-v参数

若容器内部没有挂载目录,会自动帮助创建

不支持相对路径挂载

容器和容器之间有共享目录

称为:数据卷容器管理

实现原理:必须有额外的一个容器,作为共享目录使用。其它容器指向这个容器

实现流程:

  1. 创建一个容器,通过-v 目录名,设置这个目录时其它容器共享媒介
  2. 创建其它容器,通过--volumes-from 容器名,指定哪个容器中挂载共享目录

Docker File

因为比较麻烦,可能又要占用过多的篇幅,这里不再写了(吸取了MySQL笔记的教训,就因为那篇文章过大,导致打开后很卡)。等以后再将Docker File单独的整理成一篇文章吧。

一些废话

可以看到本篇的命令很少,几乎没几个知识点,正常,毕竟本文主要以实操为主,理论知识都没多少,连面试题都没有,更别说其它不常用的命令了。

不过如果想学习更深入的docker知识的话,可以直接查看docker的官方文档


文章作者: 林风
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 林风 !
  目录