Docker

1,初识Docker

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

为了解Docker我们来了解一下项目中遇到的问题,就那我最近做的项目来说,他用到了MySQL,Redis,前端的NodeJs等各自不同的版本依赖关系复杂,兼容性问题很多,开发测试等环境差异很大,于是乎需要花费大量时间来解决这些问题。

Docker如何解决依赖兼容问题?

首先我们来分析擦欧总系统底层,加入我们本地有一个MySql,他是部署在centos中的,在执行的时候先会到我们的Centos操作系统(系统应用)之后centos会调用linux内核,内核调用计算机底层硬件进而执行程序,众多不同的操作系统,例如centos,ubuntu他们都公用一个linux内核,而Docker为什么可以做到跨系统调用呢,因为他运行在不同的操作系统上并不会依赖改系统环境,天他会将所需的库函数打包,直接借助于linux内核来运行,于是乎一切都简单了起来**。**

Docker将应用的函数库,依赖和配置一同打包(包含他所需要的系统函数库),形成可移植的镜像,并且Docker应用运行在容器中,使用沙箱机制 ,相互隔离。

2,Docker和虚拟机的差别

Docker是一i个操作进程,而虚拟机则是在操作系统中在构建一个和操作系统,所以Docker体积小,启动速度快,二虚拟机体积大,启动速度慢,性能一般。

3,Docker架构

镜像(Image):Docker将应用程序及其所需依赖,函数库,环境,配置文件等打包在一起成为镜像

容器(Container):镜像中的应用程序运行后形成的文件就是容器,Docker会给容器做个里,对外是不可见的。

DockerHub:Docker的镜像托管平台,类似于GitHub

Docker是一个CS架构的程序,由两部分组成:

服务端(server):Docker守护进程,负责处理Docker指令,管理镜像,容器等

客户端(client):通过命令或者RestAPI向Docker服务端发送指令,可以在本地或远程服务端发送指令。

4,CentOS安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。

Docker CE 分为 stable testnightly 三个更新频道。

官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以在CentOS 7安装Docker。

1.1.卸载(可选)

如果之前安装过旧版本的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

1.2.安装docker

首先需要虚拟机联网,安装yum工具,如果有则不需要安装

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

然后更新本地镜像源:

# 设置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

然后输入命令:

yum install -y docker-ce

docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

1.3.启动docker

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议直接关闭防火墙!

启动docker前,一定要关闭防火墙后!!

启动docker前,一定要关闭防火墙后!!

启动docker前,一定要关闭防火墙后!!

执行下面的命令关闭防火墙并禁止开机自启

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

通过命令启动docker:

systemctl start docker  # 启动docker服务
​
systemctl stop docker  # 停止docker服务
​
systemctl restart docker  # 重启docker服务

然后输入命令,可以查看docker版本:

如图则证明安装成功

1.4.配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台欢迎登录阿里云,全球领先的云计算及人工智能科技公司,阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安全、大数据、人工智能、企业应用、物联网等云计算服务。https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

5,Docker镜像基本命令

我们这里以拉取一个最新版nginx镜像为例:

1,从远程拉取nginx镜像,不指定版本默认最新版

docker pull nginx

2,查看拉取的镜像

docker images

其中tag是版本,image id指的是镜像唯一id

3,将该镜像保存为nginx.tar文件,方便拷贝使用

docker save -o nginx.tar nginx:latest

4,删除改镜像

docker rmi nginx:latest

5,根据nginx.tar文件重新加载改镜像

docker load -i nginx.tar

6,查看指定命令的用法,例如load命令

docker load --help

其余命令参考👇 👇 👇

Docker 命令大全 | 菜鸟教程Docker 命令大全 容器生命周期管理 run start/stop/restart kill rm pause/unpause create exec 容器操作 ps inspect top attach events logs wait export port stats 容器rootfs命令 commit cp diff 镜像仓库 login pull push sea..https://www.runoob.com/docker/docker-command-manual.html

6,Docker容器基本命令

hub.docker.comhttps://hub.docker.com/

还是根据上次拉去的nginx镜像做一个展示

1,运行nginx镜像,将容器命名为mynginx 并且将本机的80端口映射到nginx的80端口,并且在后台启动

其中--name 参数是指定容器名

-p 参数是指定映射的端口 本机端口:容器端口

-d 参数代表后台启动

 docker run --name mynginx -p 80:80 -d nginx

浏览器访问nginx,可以看到访问成功

2,查看运行日志

docker logs mynginx

3,进入容器内部

docker exex -it [容器名] [要执行的命令]

一般是执行bash,之后在执行该容器对应的命令

4,查看容器状态

docker ps #查看运行中的容器
docker ps -a #查看所有容器

5,删除容器

docker rm 容器名
dockr  rm -f 容器名 #强制删除该容器,不管是不是运行的

7,Docker数据卷

数据卷:一个虚拟目录,指向宿主主机的某个文件。

主要作用:将容器给和数据分离,解耦合,方便操作容器内的数据,保证数据安全。

数据卷操作常用命令:

docker volume create 数据卷名   #创建一个数据卷
docker vulume ls                #查看所有数据卷
docker volume inspect 数据卷名   #查看某个数据卷的详细信息
docker volume rm 数据卷名        #删除某个数据卷
docker volume prune             #删除未使用的所有数据卷

如何将数据卷挂载到一个容器中

我们使用 -v 参数来挂载

下面命令的意思是在容器启动的时候使用 -v参数将创建好的html这个数据卷挂载到/user/share/nginx/html这个目录下,这个目录是nginx容器内部的一个文件存放目录

docker run --name mynginx -p80:80 -v html:/user/share/nginx/html -d nginx

8,自定义镜像

回顾一下,镜像:就是将应用程序及其需要的系统函数库,环境,配置,依赖打包在一起,并按照一定顺序分层构建。

镜像结构:就拿mysql镜像来说,最底层一定是他所以来的系统函数库,其上一层需要给mysql配置环境变量,所需要的其他依赖,下载完成之后,给出一个入口,程序启动的脚本和参数,差不多就好了。

DockerFile

他是一个文本文件,其中包含一个个指令,用指令说明要执行什么操作来构建镜像,每一层指令都会形成一层layer。

常见指令:

更多指令参考官方文档:

Dockerfile reference | Docker DocsFind all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.https://docs.docker.com/reference/dockerfile/下面是一个基于ubuntu的基础镜像来安装jdk,配置环境变量,暴露端口,启动java项目的Dockerfile文件

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

但是上述文件构建过程太过麻烦,前面的大多数步骤都是在安装jdk于是我们可以修改文件内容,引用别人书写好的jdk镜像。如下:

# 指定基础镜像
FROM java:8-alpine

# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

总结来说:

1.Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

2.Dockerfile的第一行必须是FROM,从一个基础镜像来构建

3.基础镜像可以是基本操作系统,如Ubunuu。也可以是其他人制作好的镜像,例如:java:8-alpine

9,DockerCompose

DockerCompose:是一个基于Compose文件来帮助我们快速部署分布式应用,无需手动一个个创建和运行容器。Compose是一个文本文件,通过指令定义集群中每个容器如何运行,类似于一个个Dockerfile的集合。

安装DockerCompose

2.1.下载

首先需要下载docker!!!!

Linux下需要通过命令下载:

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

如果下载速度较慢,或者下载失败,可以先下载docker-compose文件,之后上到/usr/local/bin/目录即可。

2.2.修改文件权限

修改文件权限加上可执行权限:

# 修改权限
chmod +x /usr/local/bin/docker-compose

2.3.Base自动补全命令:

# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现错误,需要修改自己的hosts文件(这里的ip不需要替换为你自己的):

echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

到这里安装结束!!!

如何使用---后续再写

相关推荐
hgdlip3 分钟前
查看ip地址的方法有几种?探索多样方法
运维·服务器·ip地址
丶213615 分钟前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
codelife32128 分钟前
在Docker容器中执行命令
容器
神即道 道法自然 如来31 分钟前
Jenkins怎么设置每日自动执行构建任务?
运维·jenkins
petaexpress37 分钟前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
hanniuniu131 小时前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
鱼饼6号1 小时前
Prometheus 上手指南
linux·运维·centos·prometheus
m0_609000423 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记4 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
m0_741768857 小时前
使用docker的小例子
运维·docker·容器