我的電腦裝的是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