Docker 是一個(gè)為開(kāi)發(fā)者和系統(tǒng)管理理員在容器器中開(kāi)發(fā)、部署和運(yùn)行行行的平臺(tái)。
靈活、輕量級(jí)、可互換、部署簡(jiǎn)單、擴(kuò)展性強(qiáng)
Docker的應(yīng)用場(chǎng)景
Web 應(yīng)用的自動(dòng)化打包和發(fā)布。
自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布。
鏡像Image和容器Container
- 容器是運(yùn)行鏡像后產(chǎn)生的
- 鏡像是一個(gè)包含所有需要運(yùn)行行行的文文件組成的包,比比如代碼、可運(yùn)行文件、庫(kù)、環(huán)境變量和配置
文件等。
鏡像是容器運(yùn)行的一個(gè)實(shí)例例,查看運(yùn)行的容器命令:
docker ps
容器和虛擬機(jī)的區(qū)別
- 容器和普通進(jìn)程一樣直接在操作系統(tǒng)上運(yùn)行,不占用更多資源
- 虛擬機(jī)直接虛擬一個(gè)操作系統(tǒng),程序最后再虛擬操作系統(tǒng)上運(yùn)行,占用過(guò)多資源
Docker CE和Docker EE
Community edition 社區(qū)版
Enterprise edition 企業(yè)版
安裝docker 之前設(shè)置docker倉(cāng)庫(kù)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-
ce.repo
Docker 命令
安裝docker ce
sudo apt-get install docker-ce
啟動(dòng)docker
sudo systemctl start docker
service start docker
驗(yàn)證docker是否安裝成功
sudo docker run hello-world
卸載docker ce
sudo yum remove docker-ce
sudo rm -rf varlib/docker
查看docker版本號(hào)
docker version
查看docker信息
docker info
列出docker容器器
docker image ls
可整體搬遷的運(yùn)行行行鏡像
需要Dockerfile進(jìn)行行行配置,Dockerfile定義了了容器器內(nèi)的環(huán)境
mkdir docker_test
cd docker_test
vim Dockerfile
輸入如下代碼
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 -i https://pypi.douban.com/simple --trusted-host
pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this containerEXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
vim requirements.txt
Flask
Redis
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)
創(chuàng)建docker 鏡像 (-t 取一一個(gè)標(biāo)簽名字)
docker build -t myhello .
查看docker鏡像
docker image ls
重啟docker
service docker restart
上傳到DaoCloud
運(yùn)行行行容器器 -p 外面面端口口4000映射容器器內(nèi)端口口80
docker run -p 4000:80 myhello
docker run -d -p 4000:80 myhello
docker ps
停止止docker
docker container stop 63ac7fad8ea4
在docker hub上注冊(cè)賬號(hào) (國(guó)內(nèi)太慢,用用daocloud替代)
加速器器 DaoCloud - 業(yè)界領(lǐng)先的容器器云平臺(tái)
Push 鏡像到 DaoCloud 鏡像倉(cāng)庫(kù)
docker 登錄 daocloud.io鏡像倉(cāng)庫(kù)
docker login daocloud.io給鏡像打標(biāo)簽
docker tag <your-image> daocloud.io/carmack_team/<your-image>:<tag>
例例子子: docker tag myhello daocloud.io/carmack_team/myhello:v1
docker image ls
上傳鏡像
docker push daocloud.io/carmack_team/<your-image>:<tag>
例例子子: docker push daocloud.io/carmack_team/myhello:v1
從服務(wù)器器拉取鏡像并運(yùn)行行行容器器
docker run -p 4000:80 username/repository:tag
例例子子: docker run -p 4000:80 daocloud.io/carmack_team/myhello:v1