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   #啟動服務
(在啟動服務時,可能會報錯)
這時運行: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 = "<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目錄下是否有新建的文件
wang@wang-X555YI:~$     cd docker
wang@wang-X555YI:~/docker$   ls
app.py Dockerfile requirements.txt
  • 在剛才的docker目錄下創建hello鏡像
sudo docker build -t hello . 
出現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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM