博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubuntu系统利用docker容器发布简单的应用
阅读量:6879 次
发布时间:2019-06-27

本文共 4676 字,大约阅读时间需要 15 分钟。

我的电脑装的是ubuntu系统,所以以ubuntu为例来写

由于后边涉及到程序的可移植性验证,我们先在docker hub上注册一个账号(),记住用户名!

(全文直接附命令,由于我没有配置docker获得root权限,所以涉及到的docker操作命令前都要加sudo,觉得不方便的话可以再百度找找怎么办)

首先看你的ubuntu系统是否支持Docker(一般高于3.10即可)

uname -r

一  前期准备

1.获取docker安装包

wget -qO- https://get.docker.com/ | sh

2.查看docker是否安装成功,查看docker版本

docker version

3.启动服务

sudo systemctl enable docker  #设置开机自动启动,可选sudo systemctl start docker   #启动服务 (在启动服务时,可能会报错) 这时运行:sudo vim /etc/docker/daemon.json 添加内容 {
        "graph": "/mnt/docker-data", "storage-driver": "overlay" } 保存后重新启动服务即可

4.测试运行hello-world

sudo docker run hello-world 出现: Hello from Docker! This message shows that your installation appears to be working correctly. 则成功

5. 运行过程中可能由于国内网络问题,镜像拉取比较慢,需要配置一个国内的镜像地址,可以随意选,我配置的是网易的

sudo vim /etc/docker/daemon.json 插入:    {
"registry-mirrors": ["http://hub-mirror.c.163.com"]

6.查看docker下有哪些容器,因为之前我们运行过一个hello-world,所以至少会有它

sudo docker image ls

 二 配置docker容器

1.新建helloworld应用程序

  • 在你本地新建一个文件夹,在文件夹下新建三个文件:  Dockerfile  requirements.txt   app.py
mkdir docker cd docker vim Dockerfile (注意From前边不要有其他代码) 插入以下内容: # 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"] vim requirements.txt 插入以下内容: Flask Redis vim 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 = "cannot connect to Redis, counter disabled"     html = "

Hello {name}!

" \            "Hostname: {hostname}
" \            "Visits: {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)
  • 查看docker目录下是否有新建的文件
wang@wang-X555YI:~$     cd dockerwang@wang-X555YI:~/docker$   ls app.py  Dockerfile  requirements.txt
  • 在刚才的docker目录下创建hello镜像
sudo docker build -t hello . 出现successfully即成功sudo docker image lsREPOSITORY              TAG                 IMAGE ID            CREATED             SIZE770958391/get-started   part2               f80b604aa432        About an hour ago   131MBhello                   latest              f80b604aa432        About an hour ago   131MB
  • 运行一下
sudo docker run -p 4000:80 hello   #将80端口映射到4000

输入地址    ,看到Python正在为您的应用提供服务的消息。 但是该消息来自容器内部,它不知道你将该容器的端口80映射到4000,所以输入正确的URL 4000服务提供界面:Welcome to nginx!If you see this page, the nginx web server is successfully installed and working. Further configuration is required.For online documentation and support please refer to nginx.org.Commercial support is available at nginx.com.Thank you for using nginx.  应用界面:Hello World!Hostname: 8394a79a51ffVisits: cannot connect to Redis, counter disabled ctrl+c即可退sudo 出,如果想要后台运行,运行代码  sudo docker run -d -p 4000:80 hello  关闭容器进程:  1.查看正在运行的容器: sudo docker container ls CONTAINER ID     IMAGE      COMMAND        CREATED             STATUS              PORTS     NAMES5af66a9b4d9f     ubuntu     "/bin/bash"    About an hour ago   Up About an hour              jovial_almeida  2.关闭想要关闭的进程:  sudo docker stop  5af66a9b4d9f返回已关闭进程的CONTAINER ID

三 部署到docker hub

  • 登陆到本地docker公共注册表
sudo docker login  然后按照提示输入之前注册的用户名,密码  返回Login Succeeded即登陆成功
  • 标记图像
sudo docker tag hello 770958391/get-started:part2   注: hello为创建的镜像  770958391为你注册的用户名  get-started为hub里要新建的仓库  part2为仓库里项目的标签 运行完上面代码,我们去docker新建仓库   点击 + create Repository
 
  •  发布镜像
sudo docker push 770958391/get-started:part2返回:The push refers to repository [docker.io/770958391/get-started]bb1832784221: Pushed 3769158c31ac: Pushed 2ac6ade48cac: Pushed a40d037570f2: Mounted from library/python 4e1a46391216: Mounted from library/python 10dd6271862c: Mounted from library/python ba291263b085: Mounted from library/python part2: digest: sha256:ce25797c1fb3d95fc7393f015ea584be0c110e0469e186813ee755f41f76922a size: 1787成功
  • 远端调用
    sudo docker run -p 4000:80 770958391/get-started:part2  sudo docker run -d -p 4000:80 770958391/get-started:part2  #后台运行,类似前边在本地运行的例子输入地址    ,看到Python正在为您的应用提供服务的消息。但是该消息来自容器内部,它不知道你将该容器的端口80映射到4000,所以输入正确的URL

     

参考博客:

Docker之旅:在Docker容器中创建第一个程序:

Ubuntu Docker 安装:

在ubuntu中docker的简单使用(一):

转载于:https://www.cnblogs.com/wjwjs/p/10989100.html

你可能感兴趣的文章
深入了解Flutter的isolate(1) ---- 事件循环(event loop)及代码运行顺序
查看>>
startService() 过程
查看>>
WebSocket 协议 1~4 节
查看>>
Android-WItemTouchHelperPlus几行代码搞定仿QQ侧滑
查看>>
Glide 知识梳理(5) 自定义GlideModule
查看>>
聊聊eureka的delta配置
查看>>
Masonry 源码解读(下)
查看>>
Swift如何给应用添加3D Touch菜单
查看>>
05_Node js 文件管理模块 fs
查看>>
关于python中可迭代对象和迭代器的一些理解
查看>>
界面无小事(五):自定义TextView
查看>>
ES6读书笔记(三)
查看>>
视频播放器全屏旋转方案
查看>>
根据调试工具看Vue源码之生命周期(一)
查看>>
RxJS教程
查看>>
在高并发环境下Reids做缓存踩坑记录
查看>>
通俗易懂--岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)
查看>>
Word类报表实例 - 质量检测报告
查看>>
Java进阶篇设计模式之二 ----- 工厂模式
查看>>
2018以太坊编程语言solidity最佳IDE
查看>>