记得第一次知道容器这个词是2016年(技术渣),那时Openstack还如日中天,我安装了一个Ubuntu,翻了翻文档, 百度看了下仅有的几个博客,用蹩脚的操作安装上Docker(那时还部分ce,ee)就那几分钟,Docker就可以实现部署好几种应用来完成我的测试,发现docker这真是个神器,到今天为止,我也没有玩明白docker(没有长期的投入实践),包括以后的Kubernetes,Openshift,Rancher等等这些PaaS平台,也仅仅是部署,这里就不说原因了;从今天起,开始复习这些略识之无的东西,今天先复习一下命令。
安装Docker
这里以Centos7为例:
- 卸载系统自带的docker
1 | yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine |
- 添加Docker yum存储库
1
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker-ce
1 | yum install -y docker-ce |
- 启动docker服务
1 | systemctl enable docker ; systemctl start docker |
- 测试
1 | docker run hello-world |
如果需要卸载 记得卸载后删除 /var/lib/docker
目录
Docker 概念
Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。使用Linux容器部署应用程序称为容器化。容器不是新的,但它们用于轻松部署应用程序。
容器化越来越受欢迎,因为容器是:
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:您可以即时部署更新和升级。
- 便携式:您可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:您可以增加并自动分发容器副本。
- 可堆叠:您可以垂直和即时堆叠服务。
images 和 containers
通过运行image启动容器,一个image是一个可执行的包,其中包括运行程序所需的所有内容和代码、运行时环境、依赖库、环境变量和配置文件。
这里不说内部实现,从目的来看,启动一个容器的目的是为了运行一个程序,虚拟机则是安装配置一个应用程序,容器可以省去一些重复工作, 提高效率;容器运行, 在操作系统看来,就是一个独立进程,完成了沙盒应用的功能,而虚拟机则运行了一个“完整的GuestOS”,通过虚拟机管理程序(hypervisor )对主机进行虚拟访问。
Docker 基本命令
基本信息查看命令
1 | ## List Docker CLI commands |
简单Dockerfile
Dockerfile例子1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
基于Dockerfile构建应用镜像1
docker build -t image-name .
查看基于Dockerfile构建的镜像1
docker image ls
运行容器1
docker run -d -p 4321:80 testimage
待容器运行,会基于名为testimage的镜像后台运行一个容器,并且将容器内部的80端口映射到本机4321端口,如果容器80端口将可以访问,现在则可以访问宿主机ip:4321
来访问容器内部的80端口。
发布镜像
可以将本地的镜像发布到dockerhub, 随处下载运行自己的镜像,
首先你需要创建一个dockerhub账户.
本地登录dockerhub
1 | docker login |
标记镜像
1 | docker tag image username/repository:tag |
例如1
docker tag testimage xieth/mytestimage:v1
查看新标记的image1
2
3# 以下两行命令功能相同
docker image ls
docker images
现在可以从其他计算机运行刚才发布的镜像了。1
docker run -p 4321:80 xieth/mytestimage:v1
基本命令整理
1 | docker build -t friendlyhello . # Create image using this directory's Dockerfile |
小结
docker 的命令风格跟linux几乎一样,忘了直接docker --help
看下帮助,其实这些命令就现在看来几乎用不上,现在大家都在关注容器上层的集群编排,大部分不需要用手动敲命令来一个个实现, 而是通过标记语言yaml来实现容器的构建与运行。