Docker基础篇

why is docker? 容器解决了什么样的问题?

容器概念很久便出现,但是直到Docker才解决了容器实际应用和极大降低了容器工具的使用门槛,比如:LXC则是使用复杂故而没有流行起来,因此docker并不是第一款容器工具。

 

⚽what 如果docker是容器,那么什么是容器?

容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求。简单理解:容器 = 沙盒 = 类似于集装箱

 

容器 VS 虚拟化

Docker是轻量级的容器,虚拟机是虚拟的独立操作系统,相对而言非常笨重,对宿主和资源消耗是非常巨大的。打个不恰当的比方:docker像是一把瑞士军刀的Python,而虚拟机更像是C语言。

  1. 提高硬件利用率,容器比虚拟化交付速度更快,资源消耗更低
  2. 可实现业务自动扩容
  3. 宕机自愈功能
  4. 启动速度更快,开销更小

简单理解:容器化相比虚拟机更加删繁就简,运行更快快速,性能效能表现更佳。

docker的缺点:

隔离性差:docker中容器与容器之间的像是"豌豆",相对虚拟机而言非常精巧,反面而言便是太简单了,无法对容器之间做到很好的隔离。

 

what is docker?

docker的三个核心概念:

  • 镜像
  • 容器
  • 仓库

docker是应用容器,docker的三板斧:

由go语言编写,基于Linux内核实现,Docker的三大理念:

  1. bulid(构建)
  2. ship(运输)
  3. run(运行)

综上所述,粗暴理解docker = 构建镜像 + 打包在容器内 + 仓库集中运输 + 迁移另外地方搭建运行(是的,docker不生产代码,docker只是代码的高级搬运工。)

Docker 组成:

  • 主机
  • 服务端
  • 客户端
  • 仓库
  • 镜像(Images)
  • 容器(Container)

 

🏛how 安装Docker?

官方文档安装:

登录官方网站:Home - Docker

点击:Download and install

下载Linux 版本:

国内源安装

打开清华大学镜像源,点击docker-ce,如下图所示:

删除之前安装的Docker版本

yum remove docker docker-engine docker.io containerd runc

yum install -y yum-utils device-mapper-persistent-data lvm2 //安装依赖

安装centos的repo文件

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

跟换配置文件的yum源

sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

安装 Docker-CE

yum makecache fast
yum install docker-ce

检查docker配置

systemctl restart docker    //更新服务
docker version
docker info       //查看docker配置文件

 

ubuntu 安装docker

apt-get remove docker docker-engine docker.io containerd runc

安装依赖

apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

添加公钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加仓库文件:

sudo add-apt-repository \
   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

最后安装:

apt update       //更新仓库
apt-get update
apt-get install docker-ce

 

🦪Docker进阶篇

Docker镜像与制作

🎱DockerFile 制作yum版Nginx镜像

Docker构建镜像的方式:

  1. 手工编译制作
  2. DockerFile制作
  3. ....

DockerFile是属于Docker的脚本(命令的集合),DockerFile的整个工作流程是:Docker通过DockerFile脚本构建镜像,放置与容器内集中运输,当迁移需要搭建的环境中适,Docker程序再通过DockerFile解码为Linux命令,通过镜像将整个项目在新的环境内搭建。

why 使用DockerFile 构建镜像? 有什么优点?

因为DockerFile脚本更加符合Docker程序的环境,类似于一个特殊的接口,而且DockerFile搭建的镜像在重新迁移搭建的过程当中会极大减少程序需要run的部分,极大的减少程序的代码的丢失和容错率。

 

docker pull centos
docker run -it docker.io/centos/bin/bash


#创建目录环境
cd /opt/
mkdir dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}}


cd dockerfile/web/nginx
pwd
/opt/dockerfile/web/nginx


#编写DockerFile
vim ./Dockerfile


RUN rpm-ivh http:mirrirs.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum -y install vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zilb-devel
//自动解压包
openssl openssl-devel iproute net-tools iotop
ADD nginx-1.10.3.tar.gz  /usr/local/src/
RUN cd /usr/local/src/nginx-1.10.3 && ./configure -prefix=/usr/local/nginx
--with-http_sub_module && make && make install 
RUN cd/usr/local/nginx/
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
RUN useradd  nginx-s /sbin/nologin
RUN in -sv /usr/local/nginx/sbin/nginx   /usr/sbin/nginx
RUN echo "test nginx page"> /usr/local/nginx/html/nginx.html
EXPOSE 80 443
CMD["nginx"]


准备配置文件
cp /usr/local/nginx/conf/nginx.conf
cp /usr/local/src/nginx-1.10.3.tar.gz   //nginx源码


执行镜像构建文件
docker build -t jack/nginx-1.10.3:v1
/opt/dockerfile/web/nginx/


docker images     //查看是否构建生成本地镜像
docker run -d  -p 80:80 --name yum-nginx jack/nginx-1.10.3:v1 /usr/sbin/nginx   //镜像中启动容器


docker ps -a     //查看

 

🛷本地镜像上传至官方docker仓库

登录网站:Docker Hub Container Image Library | App Containerization

下载软件,登录账号,如下如所示:

具体操作如下:

docker login http://hub.docker.com/


#查看认证信息
cat ./docker/config.json


#上传镜像的tag
docker images   //查看镜像ID
docker tag +具体地址
docker login 
docker push dockers.io/xxxx


docker login   // 上传进度


docker lohin http://hub.docker.com
docker run -it docker.io/xxx