1 docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器 [2]
起源
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
一款开源软件能否在商业上成功,很大程度上依赖三件事 - 成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 之家的 PaaS 产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下来我们看看docker的故事。
环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。
云计算时代的到来 - AWS的成功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。
虚拟化手段的变化 - cloud 时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速
LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。
2 docker 安装到CentOS7.5
操作系统要求
要安裝 Docker 引擎,你需要一個維持的 CentOS 7 或 8 版本。不支持或测试存档版本。
必须启用存储库。默认情况下,此存储库处于启用状态,但如果已禁用它,则需要重新启用它。centos-extras
建议使用存储驱动程序。
3 卸载旧版本
旧版本的 Docker 被称为 或 .如果已安装这些项,请将其以及关联的依赖项一起卸载。dockerdocker-engine
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
如果报告未安装这些包,则没关系。yum
将保留 的内容,包括映像、容器、卷和网络。Docker 引擎包现在称为 。/var/lib/docker/docker-ce
安装方法
您可以根据需要以不同的方式安装 Docker 引擎:
设置存储库
安装软件包(提供实用程序)并设置稳定存储库。
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4 安装 Docker 引擎
安装最新版本的 Docker 引擎和 containerd,或转到下一步以安装特定版本:
sudo yum install docker-ce docker-ce-cli containerd.io
5 启动 Docker。
sudo systemctl start docker
通过运行映像验证 Docker 引擎是否已正确安装。hello-world
sudo docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
启动 Docker。
sudo systemctl start docker
通过运行映像验证 Docker 引擎是否已正确安装。hello-world
sudo docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
6 卸载
卸载 Docker 引擎
卸载 Docker 引擎、CLI 和容器包:
sudo yum remove docker-ce docker-ce-cli containerd.io
主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有映像、容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
您必须手动删除任何已编辑的配置文件。
7 docker命令
1. docker history : 查看指定镜像的创建历史。
--restart=always
语法
docker history [OPTIONS] IMAGE
OPTIONS说明:
• -H :以可读的格式打印镜像大小和日期,默认为true;
• --no-trunc :显示完整的提交记录;
• -q :仅列出提交记录ID。
• --------------------------进入容器内部------------------------------------------------------------------
docker exec-it webserv /bin/bash
显示这样就是进到docker webserv这个镜像中了。
echo"Hello Docker">/usr/share/nginx/html/index.html
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. docker rmi : 删除本地一个或多少镜像。
语法
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
• -f :强制删除;
• --no-prune :不移除该镜像的过程镜像,默认移除;
• -------------------------------------------------------------------------------------------------------
1. docker build : 使用Dockerfile创建镜像。
语法
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
• --build-arg=[] :设置镜像创建时的变量;
• --cpu-shares :设置 cpu 使用权重;
• --cpu-period :限制 CPU CFS周期;
• --cpu-quota :限制 CPU CFS配额;
• --cpuset-cpus :指定使用的CPU id;
• --cpuset-mems :指定使用的内存 id;
• --disable-content-trust :忽略校验,默认开启;
• -f :指定要使用的Dockerfile路径;
• --force-rm :设置镜像过程中删除中间容器;
• --isolation :使用容器隔离技术;
• --label=[] :设置镜像使用的元数据;
• -m :设置内存最大值;
• --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
• --no-cache :创建镜像的过程不使用缓存;
• --pull :尝试去更新镜像的新版本;
• -q :安静模式,成功后只输出镜像ID;
• --rm :设置镜像成功后删除中间容器;
• --shm-size :设置/dev/shm的大小,默认值是64M;
• --ulimit :Ulimit配置。
实例
使用当前目录的Dockerfile创建镜像。
docker build -t w3cschool/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox
------------------------------------------------------------------------------------------------------------------
docker save : 将指定镜像保存成 tar 归档文件。
语法
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
• -o :输出到的文件。
实例
将镜像w3cschool/ubuntu:v3 生成my_ubuntu_v3.tar文档
w3cschool@w3cschool:~$ docker save -o my_ubuntu_v3.tar w3cschool/ubuntu:v3
w3cschool@w3cschool:~$ ll my_ubuntu_v3.tar
-rw------- 1 youj youj 142102016 Jul 11 01:37 my_ubuntu_v3.ta
进入到容器内部的命令
docker exec -it 98a658d89b13 bash
dokcer ps -a 查询正在运行的container
docker exec -it 容器ID /bin/bash 进入容器
exit 退出容器
docker我常用的启动命令
Docker 启动 nginx
docker run -d -p 80:80 nginx:latest
参数说明:
run 启动某个镜像
-d 让容器在后台运行
-p 指定端口映射,宿主机的80端口映射到容器的80端口
--restart 重启模式,设置 always,每次启动 docker 都会启动 nginx 容器。
docker exec -it nginx容器ID /bin/bash # 进入容器
Docker 启动 redis
docker run --name redis -p 6379:6379 -d --restart=always redis:latest redis-server --appendonly yes --requirepass "12345678"
# 启动电脑的docker 的服务
systemctl start docker
# 启动相关的docker
查看所有的docker
docker container ls -a
#根据docker的id启动相关的docker
docker start dockerid
docker stop dockerid
• 1: Linux 下 docker 设置开机自启动
• sudo systemctl enable docker
• 2: 进入进入容器的交互模式 (docker 下安装容器的内部 命令)
• 容器名称 为 redis 或者 容器的id
• 进入容器的交互模式 docker exec -it redis /bin/bash
• 容器内部属于完整的Linux的目录结构
• 开机自启动 docker update redis --restart=always