介绍
docker是一个应用容器,也可以简单的理解为一个轻量级的虚拟机(当然实现原理和vm有很大区别),是一个可以快速交付应用、运行应用的技术。启动和移除都可以通过一行命令来完成,很方便
作用:
- 解决在微服务上,各种配置和依赖不兼容的问题
- 原理:docker将应用的函数库、依赖、配置和应用本身一起打包,形成可移植镜像。镜像中的应用程序运行起来后就是一个容器,通过沙箱机制与其他应用的容器隔离开来
2. 解决在开发生产环境不一致的问题
- 原理:docker镜像中包含完整运行环境,包括系统函数库,通过系统函数库指令直接调用Linux内核,所以仅依赖系统的Linux内核,因此可以在任意Linux系统上运行
镜像和容器
镜像:docker将应用程序及其依赖、环境、配置打包在一起就是镜像(创建后只读不可修改)
容器:镜像运行起来就是容器,一个镜像可以运行多个容器,通过沙箱机制隔离
docker架构(CS架构)
- 服务端(server):接收并处理命令,操作镜像或容器
- 客户但(client):通过命令或请求到docker服务端
DockerHub
一个镜像的托管服务器,可以从上面拉取官方的优质镜像使用。这样的平台统称为Docker Registry
Docker安装
这里以Centos为例
#如果之前有安装docker或者没有卸载安静,可用下面命令
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
联网安装yum工具
## 1.2.安装docker
首先需要大家虚拟机联网,安装yum工具
```sh
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
```
安装docker
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
#安装docker ce表示社区版免费的
yum install -y docker-ce
安装完后先关闭防火墙再启动docker
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
启动docker
通过命令启动docker:
```sh
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
docker -v #查看docker版本
## 配置镜像加速
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
配置如下
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7w1ze2x3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
整个docker就安装好了
Docker镜像相关命令
镜像命名一般分两部分组成[repository]:[tag] ,比如nginx:1.4.1,如果不指定版本号,默认为最新版本
docker images #查看镜像
docker rmi #删除镜像
docker pull xxx #从服务器拉取镜像
docker push xxx #推送镜像到服务器
这里以在docker服务器拉取nginx镜像为例,先去docker镜像仓库搜索镜像,比如DockerHub:
docker pull nginx #去服务器拉取镜像
docker images #查看镜像信息
下载完成后,还可以通过docker save将我们下载的镜像导出磁盘,然后通过load加载回来
- 通过docker xx --help命令查看语法
- 导入nginx到一个自己定义的文件
docker save --help #可以通过该命令查看具体如何使用docker save docker save -o nginx.tar nginx:latest #-o 指的是写出到某个文件 # nginx.tar指的是自己定义的一个文件,导出到镜像会存到该文件里面 # nginx:latest 分别指的是镜像名字和版本
-
现在有了一个新的镜像文件后,可以把之前拉取的镜像删除,然后将刚刚导入的镜像再导出
#删除镜像 docker rmi nginx:latest #查看镜像是否删除成功 docker images #导出镜像 docker load -i nginx.tag
任何不清楚的命令都可以通过 docker xx --help来查看使用方法
Docker容器命令
根据nginx镜像创建一个容器
docker run --name mynginx -p 80:80 -d nginx
# mynginx指的是自定义的容器名称
# -p后面将主机端口和容器端口映射,左面是主机端口,右面是容器端口
# -d后台运行容器
# nginx 镜像名字
创建完后,直接输入服务器地址即可访问nginx
下面我们进入容器内部,简单修改nginx页面
docker exec -it mynginx bash #进入容器里面操作
# docker exec 进入容器
# -it 给当前容器创建一个标准输入、输出终端,允许我们与容器交换
# mynginx 要进入的容器名称
# bash 进入容器后执行的命令 bash是一个终端交互命令
然后找到nginx的index.html文件做修改,由于是从官方拉取,所以官方网站有相应的文件位置说明,这里就直接按照位置进去了
cd /usr/share/nginx/html #进入指定位置
cat index.html #查看要修改的文件
由于镜像只是打包了一些简单函数,像vi这种修改命令没有打包进去,所以这里只能用替换命令来替换文件里的内容
sed -i 's#Welcome to nginx#小鱼修改的nginx#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html #这里是设置编码
完成后刷新nginx,效果如下
通过exit退出容器
还有一些常用的容器命令
docker ps #查看正在运行的容器
docker ps -a #查看所有容器
docker start mynginx #启动容器
docker stop mynginx #停止容器
docker rm mynginx #删除容器
docker rm -mynginx #强制删除运行中的容器
这里只做演示,通常不推荐在容器里做文件修改,太麻烦而且没有记录