记得第一次知道容器这个词是2016年(技术渣),那时Openstack还如日中天,我安装了一个Ubuntu,翻了翻文档, 百度看了下仅有的几个博客,用蹩脚的操作安装上Docker(那时还部分ce,ee)就那几分钟,Docker就可以实现部署好几种应用来完成我的测试,发现docker这真是个神器,到今天为止,我也没有玩明白docker(没有长期的投入实践),包括以后的Kubernetes,Openshift,Rancher等等这些PaaS平台,也仅仅是部署,这里就不说原因了;从今天起,开始复习这些略识之无的东西,今天先复习一下命令。
安装Docker
这里以Centos7为例:
- 卸载系统自带的docker
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存储库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker-ce
yum install -y docker-ce
- 启动docker服务
systemctl enable docker ; systemctl start docker
- 测试
docker run hello-world
如果需要卸载 记得卸载后删除 /var/lib/docker
目录
Docker 概念
Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。使用Linux容器部署应用程序称为容器化。容器不是新的,但它们用于轻松部署应用程序。
容器化越来越受欢迎,因为容器是:
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:您可以即时部署更新和升级。
- 便携式:您可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:您可以增加并自动分发容器副本。
- 可堆叠:您可以垂直和即时堆叠服务。
images 和 containers
通过运行image启动容器,一个image是一个可执行的包,其中包括运行程序所需的所有内容和代码、运行时环境、依赖库、环境变量和配置文件。
这里不说内部实现,从目的来看,启动一个容器的目的是为了运行一个程序,虚拟机则是安装配置一个应用程序,容器可以省去一些重复工作, 提高效率;容器运行, 在操作系统看来,就是一个独立进程,完成了沙盒应用的功能,而虚拟机则运行了一个“完整的GuestOS”,通过虚拟机管理程序(hypervisor )对主机进行虚拟访问。
Docker 基本命令
基本信息查看命令
## List Docker CLI commands
docker
docker container --help
## Display Docker version and info
docker --version
docker version
docker info
## Execute Docker image
docker run hello-world
## List Docker images
docker image ls
## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq
简单Dockerfile
Dockerfile例子
# 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构建应用镜像
docker build -t image-name .
查看基于Dockerfile构建的镜像
docker image ls
运行容器
docker run -d -p 4321:80 testimage
待容器运行,会基于名为testimage的镜像后台运行一个容器,并且将容器内部的80端口映射到本机4321端口,如果容器80端口将可以访问,现在则可以访问宿主机ip:4321
来访问容器内部的80端口。
发布镜像
可以将本地的镜像发布到dockerhub, 随处下载运行自己的镜像,
首先你需要创建一个dockerhub账户.
本地登录dockerhub
docker login
标记镜像
docker tag image username/repository:tag
例如
docker tag testimage xieth/mytestimage:v1
查看新标记的image
# 以下两行命令功能相同
docker image ls
docker images
现在可以从其他计算机运行刚才发布的镜像了。
docker run -p 4321:80 xieth/mytestimage:v1
基本命令整理
docker build -t friendlyhello . # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyhello # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyhello # Same thing, but in detached mode
docker container ls # List all running containers
docker container ls -a # List all containers, even those not running
docker container stop <hash> # Gracefully stop the specified container
docker container kill <hash> # Force shutdown of the specified container
docker container rm <hash> # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
docker image ls -a # List all images on this machine
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
docker login # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag # Tag <image> for upload to registry
docker push username/repository:tag # Upload tagged image to registry
docker run username/repository:tag # Run image from a registry
小结
docker 的命令风格跟linux几乎一样,忘了直接docker --help
看下帮助,其实这些命令就现在看来几乎用不上,现在大家都在关注容器上层的集群编排,大部分不需要用手动敲命令来一个个实现, 而是通过标记语言yaml来实现容器的构建与运行。