有了这篇Docker教程,彻底爱了

简介: 有了这篇Docker教程,彻底爱了

以前有句玩笑话,JAVA是跨平台的,一次编写,到处编译!诚然,java的程序在部署方面是比较复杂和难以调试的,如果是多地部署要考虑的东西很多,而打包成一个镜像,连操作系统都是完全统一的,这样在99%的情况下是可以做到一次编译到处运行的,用法简单、非常的爽

一、什么是docker

引用官方说明:Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

简单讲就是,Docker让基础设施像应用程序般轻松管理方便快速进行集成、测试和封装,极大的减少交付的延误

Docker原理

前面该吹的都吹了,这边不讲深奥原理(主要也没翻过源代码,讲不出来),docker其实也是一个虚拟机的变种,类似更高级的程序,用java术语讲,封装、抽象更具体,操作系统层面的文件能共用的都共用了,所以整体容量更小,占用更少资源。

下图是容器化和虚拟化的结构对比图,docker的运行单位是容器,运行在docker引擎上,主要依赖linux内核特性,可以部署很多平台上,但docker engine上只能跑 linux容器!

为什么使用 Docker

从商业角度来说,主要是快,天下武功唯快不破,这可以解决(忽略)很多问题!

另外,docker的设计思想是一个容器一个应用,最好是无状态的,这样在削峰填谷的时候可以全自动的伸缩!

完全微服务的理念,所以几乎是标配!当然,超密集应用还有更大生态圈,不是仅仅一个docker能解决的!

应在何时使用 Docker

如果开始考虑上微服务、迭代非常迅速,甚至一日多更,完全建议上docker!大不了最终交付改传统模式即可。

二、怎么安装docker

上文讲解了docker的设计和使用理念,这边补充下docker的使用结构

docker结构再分析

借用一下官方的图,中间是docker引擎和上面的容器应用,左边是cli客户端、同样位于宿主机上,右边是远程仓库(或局域网仓库)这里有几个概念要补充下:

  • 容器是docker运行的最小单位,资源来自于镜像,与镜像的区别在于有差异化文件,如程序jar、配置信息等,是有运行时态的数据沉淀,当容器删除时,内在数据被删除!
  • 镜像来源于仓库,分层存储(复用、减少容量、不深究),最原始的镜像只是个小型化的OS,常见的镜像在这上面增加应用,形成新的镜像,如搭载nginx的web应用镜像
  • 仓库,中央公共仓库来自于官方,因网络质量和数据安全等原因,可在局域网搭建私有化仓库,常见有官方的Registry和Vmware公司的Harbor等产品。
  • 数据卷,前面说了docker的设计理念,希望容器是无状态的,这些有状态的数据文件就通过数据卷挂载到容器中,容器的销毁、克隆不影响也可复用!

docker安装

Docker发行版有CE社区和EE商业两种版本,CE免费支持周期是7个月,建议采用stable稳定版。要求宿主机内核最低应不小于3.10版本,这边采用CentOS7最新版示例。

  • 准备好centos服务器/虚拟机后,这里更新系统和docker的源为阿里云的官方源,并安装docker-ce、设置开机自启、关闭防火墙等一系列操作!
cd /etc/yum.repos.d/  
rename .repo .repbak ./*  
wget -O /etc/yum.repos.d/aliyun-centos7.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
wget -O /etc/yum.repos.d/aliyun-centos-docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
yum clean all  
yum makecache fast  
yum update -y  
yum repolist  
yum install -y yum-utils device-mapper-persistent-data lvm2  
yum install -y docker-ce  
systemctl stop firewalld  
systemctl disable firewalld  
systemctl enable docker  
systemctl start docker
  • 设置阿里云加速源,方便后续的镜像拉取,这里需要提前到阿里云注册,使用专属加速器地址!
  • 注册地址:阿里云容器镜像服务 (aliyun.com)
mkdir -p /etc/docker  
tee /etc/docker/daemon.json <<-'EOF'  
{  
"registry-mirrors": ["https://XXXXXXX.mirror.aliyuncs.com"]  
}  
EOF  
systemctl daemon-reload  
systemctl restart docker  
docker --version
  • docker-compose安装 docker compose主要用来稍大一些应用的组合使用,比如web+mysql组合应用,一个文件搞定所有配置,并方便更新和卸载老应用

因网络问题,目前的主流都是使用daocloud的加速方案,DaoCloud/docker-mirror: docker hub mirror, Docker镜像加速器 (github.com)

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

三、拉个web应用玩玩

这边将做三个不同的场景演示:

  • 传统拉镜像、挂载html文件目录、启动应用并访问
  • 使用docker file脚本,打成镜像,存放在本地仓库,并拉取执行,这是制作自己专属产品镜像的方法
  • 使用compose脚本,组合使用,方便后期更换版本、调整配置,更高级的做法!
  • 最后补充了dockerFile和compose的组合使用!
  • 总算到了翻代码的时候了,坚持住!

场景1:hello world

docker pull nginx:stable
docker run -it --rm -d -p 8081:80 --name web -d nginx:stable
mkdir -p /usr/local/docker/nginx_docker/html
echo "<center>风里雨里,我们在厦门等你!</center>" > /usr/local/docker/nginx_docker/html/index.html
docker run -it --rm --name web\
       -v /usr/local/docker/nginx_docker/html:/usr/share/nginx/html \
       -p 8081:80 \
       -d nginx:stable
docker stop web

场景2:dockerFile

# prepare
docker pull nginx:stable
mkdir -p /usr/local/docker/nginx_docker/html
cd /usr/local/docker/nginx_docker/
echo "<center>hello world</center>" > /usr/local/docker/nginx_docker/html/index.html
tee Dockerfile <<-'EOF'
FROM nginx:stable
MAINTAINER linzhihui <linzhihui@hotmail.com>
COPY ./html/index.html /usr/share/nginx/html
EOF
docker build -t mynginx:v1.0.1 .
docker tag mynginx:v1.0.1 mynginx:latest
docker run -it --rm --name web\
       -p 8081:80 \
       -d mynginx:latest
docker stop web

场景3:compose

mkdir -p /usr/local/docker/nginx_docker/html
echo "<center>hello linbaba2</center>" > /usr/local/docker/nginx_docker/html/index.html
tee /usr/local/docker/nginx_docker/docker-compose.yml <<-'EOF'
version: "3.1"
services:
  nginx:
    image: nginx
    volumes:
      - ./html:/usr/share/nginx/html
    ports:
      - "8082:80"
    environment:
      - NGINX_HOST=foobar.com
      - NGINX_PORT=80
    container_name: nginx
EOF
cd /usr/local/docker/nginx_docker/
docker-compose up -d  # -d后台启动
docker-compose down # 停止容器并移除
docker-compose stop  # 停止
docker-compose start # 启动
docker-compose restart # 重启

场景4:Dockerfile和compose组合使用

这里用到了非markdown标准语法,主要是好看,自用,所以截了个图,供参考!

写在最后

好的工具、稳定的开发环境可以大幅提高工作效率,今天跟大家分享的小知识就到此结束了!

相关文章
kde
|
2月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
kde
937 4
kde
|
2月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
kde
1850 8
kde
|
5月前
|
文件存储 数据安全/隐私保护 开发者
群晖NAS Docker镜像源加速配置教程
本教程介绍了群晖NAS用户如何通过配置轩辕镜像加速服务提升Docker镜像拉取速度。内容包括配置前准备、详细设置步骤及日常使用说明,帮助用户快速完成配置并享受高效稳定的镜像下载体验。
kde
3271 59
|
4月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
299 16
kde
|
运维 关系型数据库 MySQL
宝塔面板 Docker 镜像加速教程
本文介绍了如何为宝塔面板中的 Docker 配置轩辕镜像加速。内容包括:安装 Docker 管理器、获取镜像加速地址、配置加速 URL 以及验证设置等步骤。通过使用免费版或专业版加速地址(如 docker.xuanyuan.me 或 xuanyuan.cloud),可显著提升镜像拉取速度。同时,还提供了日常使用方法和注意事项,帮助用户顺利完成配置并保障 Docker 服务稳定运行。
kde
260 0
|
5月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
470 11
|
6月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
就这样,你成功地用魔法召唤出了RabbitMQ,还把它和你的应用程序连接了起来。现在,消息会像小溪流水一样,在你的系统中自由流淌。别忘了,兔子们不喜欢孤独,他们需要你细心的关怀,不时地监控它们,确保他们的世界运转得井井有条。
385 18
|
6月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
至此,这次神秘而简明的部署之旅告一段落。祝你在利用RabbitMQ打造消息队列时,一切顺风顺水!
246 8
|
机器人 网络安全 数据安全/隐私保护
autMan奥特曼机器人-对接Docker版本NTQQ详细教程
本文介绍了如何在服务器上搭建NTQQ机器人,通过官方NTQQ对接各框架,实现QQ登录的稳定运行。文章提到了需要准备一台服务器和相应的软件,并详细描述了通过SSH链接服务器、创建文件夹和配置文件、编辑配置文件地址端口、运行容器等步骤。同时,文章还介绍了VNC连接的使用和配置,以及使用watchtower进行NTQQ的更新。文章总结起来就是在服务器上搭建NTQQ机器人,实现QQ登录的稳定性和自动登录功能,同时提供了更新和维护的方法。
989 3
autMan奥特曼机器人-对接Docker版本NTQQ详细教程