Docker
1、Docker是什么?

Docker 基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。
由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。
使得 Docker 技术比虚拟机技术更为轻便、快捷。
2、Docker解决了什么问题?
2.1、在Docker诞生之前存在什么问题?
- 没有版本控制,每次上线前要对老包备份。
- 没有统一配置,集群里各个硬件节点规格不一样。
- 没有统一的环境,dev环境和test环境和prod环境不一样。
- 没有隔离,ES和Redis、kafka运行在一起,抢占资源。
- 无法移植。
2.2、Docker的优点:
更高效的利用系统资源
Docker 容器不需硬件虚拟和运行操作系统的开销,因此在同等配置下,主机可以运行更多数量的应用。
更快速的启动时间
Docker 容器直接运行于宿主机内核,避免启动完整操作系统,从而实现秒级甚至毫秒级的应用启动。
一致的运行环境
Docker 镜像提供除内核外完整的运行环境,确保从开发到生产的环境一致性,避免了「代码在我机器上没问题」这类问题的出现。
持续交付和部署
对开发和运维人员来说,Docker 可以通过制作应用镜像,实现从持续集成到持续交付及自动化部署,整个过程透明且高效。
更轻松的迁移
Docker 容器化应用执行环境,使应用迁移到任意平台时环境一致、顺利运行。
更轻松的维护和扩展
Docker 利用分层存储和镜像技术,使应用复用、维护和定制变得简单高效,配合优质官方镜像,可直接用于生产或定制使用,大幅降低应用镜像制作成本。
3、安装docker
docker_install.sh
::: code-tabs#bash
@tab ubuntu
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/usr/bin/bash
sudo apt-get remove docker sudo apt-get remove docker-engine sudo apt-get remove docker.io sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -y
sudo systemctl enable docker sudo systemctl start docker
|
@tab CentOS
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/usr/bin/bash
yum -y update yum remove docker docker-client \ docker-client-latest docker-common \ docker-latest docker-latest-logrotate \ docker-logrotate docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable docker.service systemctl restart docker
|
:::
4、docker命令
4.1、image
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| docker images
docker search [镜像名]
docker pull 镜像名 docker pull 镜像名:tag
docker run 镜像名 docker run 镜像名:Tag docker stop containerId // containerId 是容器的ID
docker ps docker commit x7205xxxxxx1 sequenceiq/hadoop-docker:2.7.0-7
docker rmi -f 镜像名/镜像ID
docker rmi -f $(docker images -aq)
docker image rm 镜像名称/镜像ID
docker save -o rocketmq.tar
docker load --input rocketmq.tar 或 docker load < rocketmq.tar
|
4.1、文件
1 2 3 4 5
| docker run -v /etc/config:/etc/config my_image
docker cp /mnt/c/Users/wxx/Downloads/kafka_2.12-2.1.2.tar.gz 64222xxx110:/usr/local/
|
4.2、容器
1 2 3 4 5 6 7 8 9 10 11
| docker ps
docker ps -a
> docker run -itd --name=kylin-test --net=host kylin-os-backup:latest /bin/bash
docker stop xxxx
|
5、Dockerfile
5.1、本地文件
5.1.1、创建dockerfile项目
1 2
| $ mkdir redis && cd redis $ touch Dockerfile
|
1 2 3 4 5
| FROM centos RUN yum -y install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz \ && rm redis.tar.gz
|
5.1.2、构建
1
| docker build -t redis:test .
|
5.1.3、运行
1
| docker run -d -p 6379:6379 --name redis redis:test
|
5.2、git构建
1
| docker build -t hello-world https://github.com/docker-library/hello-world.git#master:amd64/hello-world
|
5.3、标准输入构建
1 2 3 4
| docker build -t mybusybox:latest -<<EOF FROM busybox RUN echo "hello world" EOF
|
6、例子
6.1、启动一个本地hadoop镜像
下载image
1
| docker pull sequenceiq/hadoop-docker:2.7.1
|
启动容器
1 2 3 4 5
| sudo docker run -dti --hostname bigdatadev.host \ -p 50070:50070 -p 9000:9000 -p 8088:8088 -p 8040:8040 -p 8042:8042 -p 49707:49707 \ -p 50010:50010 -p 50075:50075 -p 50090:50090 -p 2181:2181 -p 9092:9092 \ sequenceiq/hadoop-docker:2.7.0 /etc/bootstrap.sh -bash --privileged=true
|
测试:
1 2 3 4 5
| hdfs-ui http://localhost:50070/dfshealth.html#tab-overview
yarn-ui http://localhost:8088/cluster/apps/RUNNING
|
7、docker 镜像加速
7.1、配置
镜像加速器 |
镜像加速器地址 |
其它加速? |
DaoCloud 镜像站 |
https://docker.m.daocloud.io |
Docker Hub、GCR、K8S、GHCR、Quay、NVCR 等 |
网易云 |
https://hub-mirror.c.163.com |
Docker Hub |
Docker 镜像代理 |
https://dockerproxy.com |
Docker Hub、GCR、K8S、GHCR |
百度云 |
https://mirror.baidubce.com |
Docker Hub |
南京大学镜像站 |
https://docker.nju.edu.cn |
|
上海交大镜像站 |
https://docker.mirrors.sjtug.sjtu.edu.cn |
Docker Hub、GCR 等 |
中科院软件所镜像站 |
https://mirror.iscas.ac.cn |
Docker Hub |
1 2 3 4 5 6 7 8 9 10 11 12
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
|
7.2、检测
命令行执行docker info
,如果从结果中看到了如下内容,说明配置成功。
Registry Mirrors:
[…]
https://docker.m.daocloud.io
7.3、测速
使用镜像前后,可使用 time 统计所花费的总时间。测速前先移除本地的镜像!
1 2 3 4 5 6 7 8
| $ docker rmi node:latest $ time docker pull node:latest Pulling repository node [...]
real 1m14.078s user 0m0.176s sys 0m0.120s
|