容器基础

基础

制作镜像:

$ docker build " 我的镜像 "

运行镜像:

$ docker run " 我的镜像 "

多机 Docker 项目:

$ docker run -H " 我的 Swarm 集群 API 地址 " " 我的容器 "

-it 在容器启动后,分批要给一个 TTY,以进行交互。/bin/sh 是要在容器中运行的程序。

$ docker run -it busybox /bin/sh

制作镜像

在这里插入图片描述

app.py 使用 Flask 框架启动了一个 Web 服务器,如果当前环境中有“NAME”这个环境变量,就把它打印在“Helllo”后,否则就打印“Hello world”,最后在打印出当前环境的 hostname。

from flask import Flask
import socket
import os

app = Flask(__name__)

@app.route('/')
def hello():
    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>"           
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname())
    
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

requirements.txt 定义了应用的依赖

Flask

Dockerfile 制作容器镜像

# 使用官方提供的 Python 开发镜像作为基础镜像
FROM python:2.7-slim

# 将工作目录切换为 /app
WORKDIR /app

# 将当前目录下的所有内容复制到 /app 下
ADD . /app

# 使用 pip 命令安装这个应用所需要的依赖
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 允许外界访问容器的 80 端口
EXPOSE 80

# 设置环境变量
ENV NAME World

# 设置容器进程为:python app.py,即:这个 Python 应用的启动命令
CMD ["python", "app.py"]

制作镜像,-t 是为镜像加一个 Tag,即起一个好听的名字

$ sudo docker build -t helloworld .

查看结果

$ sudo docker image ls
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
helloworld                              latest              2dc63e3ec565        5 minutes ago       130MB
python                                  2.7-slim            48e3247f2a19        3 weeks ago         120MB
hub.c.163.com/liuchao110119163/ubuntu   tcpip               396485da9bdd        8 months ago        345MB

启动容器,通过 -p 4000:80 将容器内的 80 端口映射到宿主机的 4000 端口。

$ sudo docker run -p 4000:80 helloworld

打开新的终端查看

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                  NAMES
b19f2cb6dde6        helloworld          "python app.py"     About a minute ago   Up About a minute   0.0.0.0:4000->80/tcp   trusting_murdock

访问宿主机的 4000 端口,即可看到容器内的返回结果

$ curl http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> b19f2cb6dde6<br/>

上传镜像

  1. 注册了 Docker Hub 账号后,使用 docker login 命令登录。
  2. 用 docker tag 命令给容器镜像起一个完整的名字。
$ docker tag helloworld “自己的 Docker Hub 账号”/helloworld:v1
  1. 执行 docker push
$ docker push  “自己的 Docker Hub 账号”/helloworld:v1

提交修改后的镜像

原因:容器运行起来后,在里面又做了一些操作,并把操作结果保存到镜像里。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
b19f2cb6dde6        helloworld          "python app.py"     12 minutes ago      Up 12 minutes       0.0.0.0:4000->80/tcp   trusting_murdock

$ sudo docker exec -it b19f2cb6dde6 /bin/sh
# touch test.txt
# exit

$ sudo docker commit b19f2cb6dde6  “自己的 Docker Hub 账号”/helloworld:v2

docker commit 在容器运行起来后,把最上层的“可读写层”,加上原先容器镜像的只读层,打包组成了一个新的镜像。
当然,下面的这些只读层在宿主机上是共享的,不会占用额外的空间。

接下来把新镜像推动到 Docker Hub 上。

$ docker push  “自己的 Docker Hub 账号”/helloworld:v1

参考
张磊. 深入剖析 Kubernetes.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值