Docker学习笔记
嗨还害,我林风又TM来啦!今天来分享以下我的Docker笔记。
Tips:
本文较长,加载时间可能也会比较长
推荐使用PC端查看,因为有目录
理论知识
这里不多啰嗦了,像什么是Docker之类的我就不写了。
- daemon:守护进程。独立的进程。作用接收客户端传递过来的命令。
- image:镜像。镜像中包含了一些已经安装好的软件,并存放在互联网服务器中。可以通过命令下载下来,存到本地docker。
- container:容器。必须通过镜像产生。
container
kə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参数
若容器内部没有挂载目录,会自动帮助创建
不支持相对路径挂载
容器和容器之间有共享目录
称为:数据卷容器管理
实现原理:必须有额外的一个容器,作为共享目录使用。其它容器指向这个容器
实现流程:
- 创建一个容器,通过
-v 目录名
,设置这个目录时其它容器共享媒介 - 创建其它容器,通过
--volumes-from 容器名
,指定哪个容器中挂载共享目录
Docker File
因为比较麻烦,可能又要占用过多的篇幅,这里不再写了(吸取了MySQL笔记的教训,就因为那篇文章过大,导致打开后很卡)。等以后再将Docker File单独的整理成一篇文章吧。
一些废话
可以看到本篇的命令很少,几乎没几个知识点,正常,毕竟本文主要以实操为主,理论知识都没多少,连面试题都没有,更别说其它不常用的命令了。
不过如果想学习更深入的docker知识的话,可以直接查看docker的官方文档