官方文档地址:https://docs.docker.com/get-started
本文为个人学习笔记备忘跟总结,不作为他人学习的参考资料;但如果下面内容能对你有所帮助,实属荣幸;如有错误,还望海涵,及时指正,感谢;
概念:
(下面都参考自:http://www.cnblogs.com/SzeCheng/p/6822905.html)
Docker Community Edition(CE)非常适合希望开始使用Docker并尝试使用基于容器的应用程序的个人开发人员和小型团队。
Docker企业版(EE)专为企业开发和IT团队而设计,他们在生产中大规模构建,发布和运行业务关键型应用程序。
Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建
Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 时速云 、网易云 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了
思考:跟git有点相似呢
一、安装:
系统版本:centos7
yum update
个人习惯,先更新下,能省去不少排坑的步骤
cd /etc/yum.repos.d/
wget https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly :启用yum源(照着官方文档做的,可否忽略未测试):
yum install docker-ce docker-ce-cli containerd.io -y
二、安装测试:
yum -y install epel-release : 增加epel源
yum -y install python-pip : 安装pip
systemctl start docker :启动服务
docker run hello-world :启动测试如下图

三、容器测试(下面翻译取自官方文档):
使用定义容器 Dockerfile
Dockerfile定义容器内环境中发生的事情。对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”到哪些文件那个环境。但是,在执行此操作之后,您可以预期Dockerfile在此处定义的应用程序的构建 在其运行的任何位置都完全相同。
Dockerfile
在本地计算机上创建一个空目录。将目录(cd)更改为新目录,创建一个名为的文件Dockerfile,将以下内容复制并粘贴到该文件中,然后保存。记下解释新Dockerfile中每个语句的注释。
mkdir --p /data/docker :创建目录
这里看文档,应该是要安装一个flask(python写的框架,类似django,提供web服务,app.py应该就相当于一个project),具体内容如下

[root@localhost docker]# cat requirements.txt
Flask
Redis
[root@localhost docker]# cat 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
COPY . /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"]
[root@localhost docker]# cat app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(name)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}
" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if name == "main":
app.run(host='0.0.0.0', port=80)
pip install -r requirements.txt: 安装txt里面的东西,这里可能会失败,我就遇到过,提示超时,尝 试几次后最终就装完了
docker build --tag=friendlyhello:创建一个Docker镜像
docker image ls:查看镜像

docker run -p 4000:80 friendlyhello: 运行应用程序,使用以下方法将计算机的端口4000映射到容器的已发布端口80 -p

浏览器查看:
能访问到即可,内容是跟app.py的东西相关,flack没学习过,不做深究

docker container ls:查看运行的容器
docker container stop id :停止,id是下面的CONTAINER ID

如果你希望它在后台运行,则加入 -d 参数,这样你会得到一个长id,用命令查看后发现命令得到的id只是前面的id数
docker run -d -p 4000:80 friendlyhello

今天的学习进度到此,第2部分剩下内容等明天做完需求有空再来:
**(•‾̑⌣‾̑•)✧˖° **看了下时间,就快下班了,准备回去打机打机~~~~~

-------------------------------------- 补充 -----------------------------------
镜像共享化:
首先需要注册一个 Docker ID

登录:

在命令行上登录:

标签(tag)是可选的,但建议使用,因为它是注册管理机构用来为Docker镜像提供版本的机制。为存储库提供存储库和标记有意义的名称,例如 get-started:part2。这会将图像放入get-started存储库并将其标记为part2。
命令是: docker tag 你的镜像名 id名/标签 ,如下演示:
[root@localhost ~]# docker tag friendlyhello chenjinjie/get-started:part1
查询下可以看到
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
chenjinjie/get-started part1 1305eda9e3c2 19 hours ago 131MB
friendlyhello latest 1305eda9e3c2 19 hours ago 131MB
python 2.7-slim 8559620b5b0d 9 days ago 120MB
hello-world latest fce289e99eb9 2 months ago 1.84kB
把镜像推到docker个人账号上面:
[root@localhost ~]# docker push chenjinjie/get-started
The push refers to repository [docker.io/chenjinjie/get-started]
7d156e541580: Pushed
a939cd8d92f9: Pushed
e4d83e82e6f2: Pushed
c39d784764e0: Mounted from library/python
4bad4dc0f0f2: Mounted from library/python
d443bc70f9c5: Mounted from library/python
6744ca1b1190: Mounted from library/python
part1: digest: sha256:c613e5d988bdc49e5dc7215ecc23ba034634ffd14e7d1c86934aeff21b310c24 size: 1788
初探docker到此(✿✿ヽ(°▽°)ノ✿撒花撒花~~),这两天找个机会用一个实际的东西来制作镜像然后给另外一台虚拟机使用