Docker 基础介绍
什么是Docker
Docker是一种基于Linux内核的,属于操作系统层面的虚拟化技术,是一种环境部署工具,本质就是一个软件.
用来发布网站的
这里提一下VM,Vmware虚拟机是基于硬件(CPU,内存,磁盘)的一种虚拟化技术
Docker图解
Docker的优点
当我们需要搭建环境的时候,如果用传统的方式,每一个环境就需要一个服务器,产生的费用会很高,
那么用Docker来搭建:
- 可以在一台Linux服务器上搭建多个环境(这里的环境指的就是Docker容器)
- 容器之间的隔离性好
- 只要镜像文件还在,那么就算一个Docker容器死亡,也不会影响其他的容器
- 占用磁盘空间小,速度快(秒级)
- 快速完成配置任务,简化了部署方式
- 提升开发效率
- 应用迁移方便
Docker是比较流行的环境部署方式
Docker 三要素
docker 镜像
-
一种特殊的文件,负责产生容器,是容器所运行的环境
-
一个镜像可以生成多个容器
-
一个容器死亡,其他容器可以继续使用
docker 容器
一个小Linux系统或者说一个小型服务器
docker 仓库
在互联网上用来存放dokcer镜像的地方
docker的安装
- yum -y update 升级Linux所有组件(-y表示执行过程中都选yes)
- yum install -y docker 下载docker
- reboot 重启系统
启动docker服务
- systemctl start docker 启动docker服务
- systemctl stop docker 停止docker服务
- systemctl restart docker 重启docker服务
- systemctl enable docker 开机自动启动docker服务
- systemctl disable docker 取消开机自启动docker服务
验证docker服务是否启动
docker version
当有两个docker版本号时(C/S),说明启动服务成功
查看docker版本号
docker -v
docker用户管理
需求:普通用户并没有docker使用权限,需要root用户创建docker组,为普通用户提供docker服务
-
创建docker组
[sudo] groupadd docker (在root用户下不需要使用sudo,sudo表示以管理员身份运行)
注意:这里的组名必须为docker
-
将普通用户添加docker组
-
修改/etc/sudoers配置文件
修改该文件之前,因为该文件没有可写属性,需要手动修改可写属性
chmod u+w /etc/sudoers
进入/etc/sudoers配置文件,添加一行:用户名 ALL=(ALL) ALL
(小技巧:这里可以使用**/root命令查找root字符串,输入:set nu**显示行数)
保存退出
-
重启系统
以上步骤完成之后,普通用户就可以使用docker了
上面红色提示不用管(只是为了让你输入root密码)
查看docker仓库的网站
docker镜像相关命令
-
搜索指定镜像信息
docker search 镜像名(如:php)
-
下载镜像
docker pull 镜像全名:版本号,:版本号可以不写,不写表示下载最新版本
-
查看本地所有镜像
docker images
-
删除镜像
docker rmi 镜像名(或镜像ID(输入前几位就行了,只要是唯一的就行))
加速下载镜像
国外镜像下载会很慢,这里可以使用国内的网站镜像去下载
-
找到docker配置文件/etc/docker/daemon.json,写入网址
(这里用的是阿里云)
-
重新加载配置文件,systemctl daemon-reload
-
重启docker服务,systemctl restart docker
docker容器相关命令
-
生成容器
docker run -d 镜像名
从镜像中创建容器,-d选项表示容器在后台运行
-
查看当前系统中所有容器信息
docker ps -a
-
停止UP状态的容器
docker stop 容器ID
-
删除容器
docker rm 容器ID
注意:只能删除非UP状态(也就是EXIT或CREATE状态)的容器
-
进入容器
docker exec -it 容器ID bash
注意:只能进入UP状态的容器
-
退出容器
先按ctrl p再按ctrl q,或者直接按ctrl z
docker真正的作用->发布网页
docker真正的作用就是使用docker容器作为一个平台(服务器)来发布网页
知识点(重点)
端口映射和路径映射
外部游览器通过大Linux的端口(8088(这个可以自己随便设定,一般在3000以上))找到大Linux服务器,
然后大Linux使用端口映射技术找到容器端口80,
这样就可以使外部游览器能够找到容器了
路径映射是一样的道理
-
端口映射使用以下表示
-p 大Linux的端口号:容器的端口号 (大Linux端口号自己随便取,一般大于3000,容器端口号默认为80)
-
路径映射使用以下表示
-v 大Linux中成果文件的路径:容器中成果文件的路径 (容器中成果文件的路径默认为/app)
docker 发布php类型网页
思路:
- 需要下载一个php镜像,来作为php类型网页的运行环境
- 将开发成果传至linux
- 使用镜像生成容器
- 将开发成果放到容器中,来共外界(游览器)访问
具体实现:
-
下载镜像
docker pull webdevops/php-apache-dev
apache版本用来接受游览器的请求
-
将开发成果传至Linux,注意:不能直接放在属主目录中,需要在属主目录中新建一个目录
-
使用命令生成容器
-d表示生成的容器在后台运行
这里可以验证以下容器时候生成:
去游览器上看看:
成功.
发布多个网页时,使用不同的端口号就可以了,如:8088改为8077
docker 发布java类型网页
知识点:
java开发的成果物是一个jar包,要运行jar包,必须使用命令:java -jar jar包名,
linux中是没有java命令的,这个命令必须在java容器中使用,但是使用docker run 镜像名生成容器时,
此时生成的容器并没有java -jar 这个命令,
所以我们要在容器生成之前写一个配置文件,将java -jar命令写入其中,然后利用这个配置文件自定义一个镜像,用这个镜像生成容器,那么在容器生成的时候就可以自动执行该命令了,
执行了该命令之后才能生成我们的java环境,才能运行java成果
思路:
-
下载java运行环境的镜像
docker pull openjdk:8-jdk-alpine
-
编写配置文件
编写镜像配置文件,必须新建一个名为Dockerfile的文件(严格区分大小写),
这个文件就作为自定义镜像的配置文件
保存退出
(注意:配置文件中尽量不要写中文,否则可能出现编码错误)
-
自定义镜像
构建镜像之前需要确保Dockerfile文件和开发成果物(jar包)在同一目录下
使用命令:
docker build --build-arg 参数名=jar包名 -t 新镜像名 Dockerfile文件所在目录
-
使用自定义的镜像生成容器
docker run -d --name=yzz_test -p 8011:18888 yzz:1.0
–name选项表示指定新生成容器的名字,
注意:这里的镜像名必须带上版本号,否则系统识别不出来
docker发布复杂应用
需要多个镜像容器来发布
-
安装一个小工具,docker-compose
使用该工具可以执行.yml配置文件
.yml配置文件里面含有编写好的需要哪些镜像和镜像生成容器的步骤
docker-compose会自动读取同目录下的.yml文件(自动下载镜像)
安装步骤:
- 将docker-compose文件传至Linux
-
将其放入/usr/loacl/bin目录下
注意这里最好在你的属主目录下留一份docker-compose文件,方便后面执行.yml文件(因为它两要放在同一目录下)
-
改写该文件的权限
-
将.yml文件放入与docker-compose相同目录下
-
执行.yml文件
docker-compose up -d
该命令会自动读取.yml文件并下载所需要的镜像文件