Docker

一、概述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

官网: https://www.docker.com/

1.容器与虚拟化区别

容器技术是一种轻量级虚拟化技术

①轻量,与宿主机共享操作系统,直接使用宿主机的内核

②部署快,容器镜像相对于虚拟机镜像小,部署速度非常快,可以在几秒内完成部署

③移植性好,Build once, Run anywhere

④资源利用率高,相对于虚拟机,不需要安装操作系统,所有减少了很多CPU与内存消耗

2. Docker用到的内核技术

Docker容器本质上是宿主机的进程

Docker通过NameSpace实现资源隔离

Docker通过Cgroups实现资源限制

3.存储驱动

写时复制与用时分配

Docker 通过写时复制cow(Copy-on-write)与用时分配(Allocate-on-demand)技术来提高存储的利用率

  • 写时复制

该技术可以让多个容器共享同一个镜像的文件系统,所有数据从镜像中读取

只有当要对文件进行修改时,才从镜像里把要写的文件复制到自己的文件系统进行修改,所有的写操作都是这样,并不会修改镜像的源文件

多个容器操作同一个文件,会在每个容器的文件系统里生成一个副本,每个容器修改的都是自己的副本

  • 用时分配

按需分配空间,用多少分配多少,使用时才分配

联合文件系统

UnionFS,把不同物理位置的目录合并mount到同一个目录中

用来实现写时复制与用时分配

  • aufs
  • overlay

二、Docker 安装

配置yum

#(1)CentOs源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#(2)Docke 源
#源一:Docker官方源
wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#源二:Docerk阿里源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

安装

yum install docker-ce -y

启动

systemctl start docker
systemctl enable docker
#查看版本
docker -v
docker version
#查看信息
docker info

跨主机访问

当需要在另一台机器远程访问时,需要配置

docker daemon 管理

#第一步:关闭服务
systemctl stop docker
#第二步:
vim /etc/docker/daemon.json
{
    "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
#第三步:
vim /usr/lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
#删除 -H fd://.....
[Service]
ExecStart=/usr/bin/dockerd

#第四步:
systemctl daemon-reload
#第五步:
systemctl start docker
ss -naltp | grep :2375
#第六步:远程主机访问
docker -H 容器宿主机IP version

三、镜像、容器、仓库

  • 镜像

镜像就是打包好的环境与应用

镜像分类: 操作系统、应用程序

  • 容器

容器就是镜像运行的实例

  • 仓库

用于存放镜像

官方仓库:https://hub.docker.com/

四、镜像相关命令

#1.查看本地镜像
docker images
#2.搜索镜像
docker search centos
#3.拉取镜像
docker pull busybox
#4.推送镜像
docker push 镜像名
#5.删除镜像
docker rmi imagename:tag
docker rmi imageid
#6.打tag
docker tag busybox:latest tigerup/test:v1

#7.镜像导出
docker save busybox -o /tmp/busybox.tar.gz
#8.镜像导入
docker load < /tmp/busybox.tar.gz
docker load -i /tmp/busybox.tar.gz

创建镜像

从容器创建一个新的镜像

docker commit a404c6c174a2  my_mysql:v1 

五、容器相关命令

基本操作

#1.查看所有容器
docker ps -a
#2.运行容器
#latest是默认的TAG标签,可以省略;
docker run centos:latest echo test
docker run hello-world
#3.后台运行
docker run -d centos /bin/bash -c "while true; do echo test;sleep 3;done"

#4.查看控制台输出
docker logs ID/NAMES
#5.停止与开始容器
docker stop ID/NAMES
docker start ID/NAMES
docker restart ID/NAMES

#6.查看容器属性信息
docker inspect ID/NAMES

删除

#删除容器
docker rm ID
#移除不使用的数据
docker system prune 
#停止所有容器
docker stop $(docker ps -aq)
#删除所有容器
docker rm $(docker ps -aq)

交互式操作

#交互式操作,运行在前台
docker run -i -t --name=test01 centos:latest /bin/bash
#退出交互
#Ctrl + P + Q

#连接容器
docker attach ID/NAMES

exec

docker exec c1 touch /root/123
docker exec c1 ls -l /root/123
#交互式操作
docker exec -it c1 /bin/bash

六、镜像使用

docker run相关参数

#交互式运行
-it
#后台运行
-d
#指定端口映射
-p
#指定挂载卷
-v
#指定环境变量
-e
#指定重启规则
--restart

httpd

docker run -it -d -p 80:80  --name httpd1 -v /dockermount/www/:/usr/local/apache2/htdocs/ httpd

mariadb

docker run -d -p 3306:3306 --name mariadb1 -v /dockermount/mysql/data:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=123 mariadb:latest

nginx

#第一步:创建配置文件 
vim /dockermount/nginx/etc/nginx.conf
#第二步:创建测试文件
echo "test" > /dockermount/nginx/html/index.html
#第三步:运行容器
docker run -d -p 8001:80 --restart=always --name=nginx1 -v /dockermount/nginx/html:/usr/share/nginx/html -v /dockermount/nginx/etc/nginx.conf:/etc/nginx/nginx.conf -v /dockermount/nginx/log:/var/log/nginx nginx:latest

tomcat

docker run -d -p 8080:8080 -v /data/tomcat_data:/usr/local/tomcat/webapps/ROOT --name=tomcat1 tomcat:latest

七、Web管理平台

  • DockerUI
#下载镜像
docker pull uifd/ui-for-docker
#启动容器
docker run -d --name dockerui -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker
#

  • Portainer
#下载镜像
docker pull portainer/portainer
#启动容器
docker run -d -p 9001:9000 --name=portainer -v /var/run/docker.sock:/var/run/docker.sock  portainer/portainer

其他

1.解决时间不一致

由于下载官方镜像的时区与我们所在时区不一致,所以需要解决时间问题,以确保时间一致性

#方式一:宿主机操作
docker exec -it http1 /bin/bash
docker cp -L  /etc/localtime http1:/etc/localtime
#方式二:容器中操作
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.开启路由转发

echo  'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

3.更多可参考

https://docs.docker.com/

https://www.runoob.com/docker/docker-tutorial.html

http://c.biancheng.net/view/3118.html

Last modification:February 26th, 2020 at 03:07 pm