Ubuntu系统利用docker容器发布简单的应用

我的电脑装的是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   #启动服务

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 dockercd dockervim Dockerfile(注意From前边不要有其他代码)插入以下内容:# Use an official Python runtime as a parent imageFROM python:2.7-slim

# Set the working directory to /appWORKDIR /app

# Copy the current directory contents into the container at /appADD . /app

# Install any needed packages specified in requirements.txtRUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this containerEXPOSE 80

# Define environment variableENV NAME World

# Run app.py when the container launchesCMD ["python", "app.py"]

vim requirements.txt 

插入以下内容:Flask
Redis

vim app.py

插入以下内容:from flask import Flaskfrom redis import Redis, RedisErrorimport osimport socket

# Connect to Redisredis = 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}<br/>" \           "<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)
  • 查看docker目录下是否有新建的文件
[email protected]X555YI:~$     cd docker
[email protected]-X555YI:~/docker$   ls
app.py  Dockerfile  requirements.txt
  • 在刚才的docker目录下创建hello镜像
sudo docker build -t friendlyhello .
出现successfully即成功

sudo docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
770958391/get-started   part2               f80b604aa432        About an hour ago   131MB
hello                   latest              f80b604aa432        About an hour ago   131MB
  • 运行一下
sudo docker run -p 4000:80 hello   #将80端口映射到4000

输入地址  http://0.0.0.0:80  ,看到Python正在为您的应用提供服务的消息。但是该消息来自容器内部,它不知道你将该容器的端口80映射到4000,所以输入正确的URL http://localhost: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: 8394a79a51ff
Visits: 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     NAMES
5af66a9b4d9f     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新建仓库   Docker Hub点击 + 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  #后台运行,类似前边在本地运行的例子

输入地址  http://0.0.0.0:80  ,看到Python正在为您的应用提供服务的消息。但是该消息来自容器内部,它不知道你将该容器的端口80映射到4000,所以输入正确的URL http://localhost:4000

参考博客:

Docker之旅:在Docker容器中创建第一个程序:https://blog.csdn.net/wd2014610/article/details/80354714

Ubuntu Docker 安装:https://www.runoob.com/docker/ubuntu-docker-install.html

在ubuntu中docker的简单使用(一):https://www.cnblogs.com/fuGuy/p/8399868.html

原文地址:https://www.cnblogs.com/wjwjs/p/10989100.html

时间: 2024-11-02 06:49:40

Ubuntu系统利用docker容器发布简单的应用的相关文章

docker (2)---存储、网络(利用docker容器上线静态网站)

一.docker底层依赖的核心技术 1.命名空间 (Namespaces) 2.控制组 (Control Groups) 3.联合文件系统 (Union File System) 4.Linux 虚拟网络支持:本地和容器内创建虚拟接口 (1) 命名空间(Namespaces): 实现了容器间资源的隔离,每个容器拥有自己独立的命名空间 , 运行其中的应用就像是运行在独立的操作系统中一样 , 我们都可以看到文件系统,网卡等资源保证了容器之间互不影响,namesaces管理进程号 , 每个进程命名空间

Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 二.安装Docker 1.检查内核版本 # uname -r      查看当前linux得版本信息 Docker要求CentOS7最低内核版本为3.1版本 2. 关闭防火墙和selinux # systemctl stop firewalld #

Linux 系统中 Docker 容器安装及使用

Docker 简介 产生背景 项目的开发环境和部署环境不一致,部署环境配置难度大.集群技术的发展,集群的相同配置操作难度大. 基本理念 使用Go语言实现的云开源项目,"一次编译,处处运行",只需要一次配置环境,就可以在其他环境一键部署,软件即容器,虚拟化. 虚拟化技术 虚拟机:一种带环境安装的解决方案,模拟整套操作系统,笨重. 容器:将所有运行环境打包成互相隔离的容器,不进行硬件虚拟. 开发/运维(DevOps) 开发自运维.一次开发,处处运维. 官方资料 Docker Docker中

Ubuntu系统利用Vultr服务器搭建SS教程

我这边是用ubuntu在海外服务器上(Vultr)部署的SS,下面来教大家怎么搭(文末附带工具下载地址): 一.购买服务器 要搭梯子,首先得有一个香港或者海外的服务器,这里我用的是Vultr,经过对比Vultr的性价比很高:速度.价格(最便宜的2.5美元).流量都很不错,如果只用来搭梯子搓搓有余,还能额外建个小网站.而且可以用支付宝来支付. 1.注册: Vultr注册网址:点击进入 2.充值:Vultr可以选支付宝来充值,支付宝最低充值10美元(少吃几块肉...) 3.充值完成后,点Server

ubuntu系统下使用python3实现简单的网络聊天程序

这是我的第二篇博客,很遗憾第一篇博客没有得到应有的认可. 可能是因为原理介绍和实操部分不够多,只是单纯分析了某一条指令在打开网页过程中,输出的变化. 在我的第二篇博客中把相关原理介绍的更加详细了,同时丰富了程序代码部分的介绍. 本文对通信相关知识点(如socket套接字.TCP/IP.HTTP通信协议).hello/hi网络聊天程序代码.python socke接口与Linux socket api之间的关系三个方面做了相关介绍 一.网络通信相关知识 首先必须明确一点,我们进行网络通信之前,必须

Docker学习总结(8)——利用Docker开启持续交付之路

持续交付即Continuous Delivery,简称CD,随着DevOps的流行正越来越被传统企业所重视.持续交付讲求以短周期.小细粒度,自动化的方式频繁的交付软件,在这个过 程中要求开发.测试.用户体验等角色紧密合作,快速收集反馈,从而不断改善软件质量并减少浪费.然而,在我所接触的传统企业中,对于持续交付实践的实施都 还非常初级,坦白说,大部分还停留的手工生成发布包,手工替换文件进行部署的阶段,这样做无疑缺乏管理且容易出错.如果究其原因,我想主要是因为构建一个 可实际运行且适合企业自身环境的

理解Docker容器的进程管理

摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)"的方式.这种方式非常适合以单进程为主的微服务架构的应用.然而由于一些传统的应用是由若干紧耦合的多个进程构成的,这些进程难以 Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per contain

当公有云Azure拥抱Docker容器技术

本文转载至 http://3387405.blog.51cto.com/3377405/1598977 预见未来看似是一件不太可能的事情,然而现在企业科技高速发展的态势完全超乎想象. 就在几周前InfoWorld的主编Eric Knorr在引流潮流专栏发表一篇非常火爆的关于2015年以及之后的九大科技企业趋势,在其中非常清晰的指出这九大潮流中头两位就是公有云的胜利和容器技术的狂热.从这里我们很容易理解为什么最近Scott Guthrie 发表并且Jason Zander 再次阐述与Docker合

Ubuntu系统的搭建

Linux系统有很多种,对于一个没有接触过Linux的小白来说,Ubuntu是最容易搭建,所以此处搭建一个Ubuntu系统. 1.到Ubuntu官网下载一个镜像文件 -- http://www.ubuntu.org.cn/index_kylin 这里下载的是Ubuntu麒麟系统,为中国用户定制的Ubuntu系统,用起来会很方便. 2.下载一个分区助手 -- 百度一下 “分区助手”,第一个就是了. 3.利用分区助手从磁盘分区一个30G的独立盘出来,待会就把Ubuntu系统安装在你这个盘上. 4.利