前言
docker安裝及使用
一、什么是docker
Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux或Windows操作系統(tǒng)的機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
二、docker和虛擬機之間的區(qū)別
虛擬機:虛擬機是通過Hypervisor(虛擬機管理系統(tǒng),常見的有VMWare workstation、VirtualBox),虛擬出網(wǎng)卡、cpu、內(nèi)存等虛擬硬件,再在其上建立虛擬機,每個虛擬機是個獨立的操作系統(tǒng),擁有自己的系統(tǒng)內(nèi)核。
容器:容器是利用namespace將文件系統(tǒng)、進(jìn)程、網(wǎng)絡(luò)、設(shè)備等資源進(jìn)行隔離,利用cgroup對權(quán)限、cpu資源進(jìn)行限制,最終讓容器之間互不影響,容器無法影響宿主機。
三、docker安裝(centos系列安裝)
1.安裝docker命令
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
2.啟動docer并設(shè)置開機自啟
systemctl start docker
systemctl enable docker
3.docker配置加速度
修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 鍵值;注冊阿里云,可獲取自己的加速器
{.
"registry-mirrors": ["https://registry.docker-cn.com"]
}
4.docker安裝驗證
docker --version
四、docker使用
1.docker常用命令
指令 說明
docker images 查看已下載的鏡像
docker rmi 鏡像名稱:標(biāo)簽名 刪除已下載的鏡像
docker search 鏡像 從官方倉庫(hub.docker.com)查找鏡像
docker pull 鏡像名稱:標(biāo)簽名 標(biāo)簽名默認(rèn)是 latest,代表最新版本。
docker run 創(chuàng)建容器
docker ps 列出運行中的容器(運行中)
docker ps -a 列出所有的容器(運行、未運行)
docker rm 容器名稱 刪除停止的容器
docker rm -f 容器名稱 刪除運行中的容器
docker start 容器名稱 啟動容器
docker stop 容器名稱 停止容器
docker restart 容器名稱 重啟容器
docker exec 執(zhí)行容器中的指令
docker logs -f 容器名稱 查看容器日志
2.docker參數(shù)
1.常用命令
docker run --name 容器名稱 -d -p 主機端口:容器內(nèi)端口 -e 環(huán)境變量 -v localpath:dockerpath --link 其它容器名:容器中別名 鏡像名稱:標(biāo)簽名
-d: 后臺運行容器,并返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用;
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
--name="XXXX": 為容器指定一個名稱;
-e username="XXXX": 設(shè)置環(huán)境變量;
-m :設(shè)置容器使用內(nèi)存最大值;
--link=[]: 添加鏈接到另一個容器;當(dāng)要訪問其它容器中的內(nèi)容時,需要先鏈接才可以使用
-p: 開放一個端口或一組端口
-v: 映射容器的卷
2.基本命令使用
啟動容器
docker run -d --name jenkins -v /root/xvdd:/var/jenkins_home -p 8888:8080 -p 50001:50000 jenkins/jenkins:lates
查看日志
docker logs -f jenkins
命令交互
docker exec -it --user root jenkins bash
復(fù)制文件至容器中
docker cp test.py jenkins:/root
3.網(wǎng)絡(luò)命令使用
查看默認(rèn)網(wǎng)絡(luò)
docker network ls
查看網(wǎng)絡(luò)詳細(xì)信息
docker network inspect 網(wǎng)絡(luò)id
創(chuàng)建新網(wǎng)絡(luò)
docker network create -d 網(wǎng)絡(luò)類型 新網(wǎng)絡(luò)名稱
使用新網(wǎng)絡(luò)
docker run -d -it --network test_network --name network_test1 jenkins/jenkins
刪除網(wǎng)絡(luò)
docker network rm test_network
五、使用Dockerfile定制鏡像
Dockerfile 是一個文本文件,其內(nèi)包含了一條條的 指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。
創(chuàng)建Dockerfile
FROM ubuntu:16.04
# 復(fù)制國內(nèi)更新源
COPY sources.list /etc/apt/sources.list
# 跳轉(zhuǎn)到指定目錄
WORKDIR /home
# 復(fù)制文件到容器
COPY requirements.txt .
# 安裝curl、python3、pip3以及flask用的包
RUN apt-get update \
&& apt-get install python3 -y && apt-get install curl -y \
&& apt-get install python3-pip -y \
&& pip3 install --upgrade pip \
&& apt-get --purge remove python3-pip -y \
&& curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py \
&& python3.5 get-pip.py \
&& pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 復(fù)制flask示例py文件
COPY main.py .
# 對外暴露端口
EXPOSE 8899
# 運行測試項目
CMD ["python3","main.py"]
用到的文件
構(gòu)建鏡像
docker build -t ubuntu_flask:2.0 . -f Dockerfile_3
啟動服務(wù):
命令小結(jié):
# Base images 基礎(chǔ)鏡像
FROM centos
#MAINTAINER 維護(hù)者信息
MAINTAINER xxxxxx
#ENV 設(shè)置環(huán)境變量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在當(dāng)前目錄下,拷過去會自動解壓
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 執(zhí)行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相當(dāng)于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 運行以下命令
CMD ["nginx"]
六、docker-compose安裝及使用
Compose 是用于定義和運行多容器 Docker 應(yīng)用程序的工具。通過 Compose,您可以使用 YML 文件來配置應(yīng)用程序需要的所有服務(wù)。然后,使用一個命令,就可以從 YML 文件配置中創(chuàng)建并啟動所有服務(wù)
1.docker-compose安裝
github上下載二進(jìn)制文件
https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
放入/usr/local/bin/ 路徑下并重新命名添加可執(zhí)行權(quán)限
mv docker-compose-linux-x86_64 docker-compose
chmod +x docker-compose
2.dockr-compose命令
docker-compose up
用于部署一個 Compose 應(yīng)用
默認(rèn)情況下該命令會讀取名為 docker-compose.yml 或 docker-compose.yaml 的文件
當(dāng)然用戶也可以使用 -f 指定其他文件名。通常情況下,會使用 -d 參數(shù)令應(yīng)用在后臺啟動
docker-compose stop
停止 Compose 應(yīng)用相關(guān)的所有容器,但不會刪除它們
被停止的應(yīng)用可以很容易地通過 docker-compose restart 命令重新啟動
docker-compose rm
用于刪除已停止的 Compose 應(yīng)用
它會刪除容器和網(wǎng)絡(luò),但是不會刪除卷和鏡像
docker-compose restart
重啟已停止的 Compose 應(yīng)用
如果用戶在停止該應(yīng)用后對其進(jìn)行了變更,那么變更的內(nèi)容不會反映在重啟后的應(yīng)用中,這時需要重新部署應(yīng)用使變更生效
docker-compose ps
用于列出 Compose 應(yīng)用中的各個容器
輸出內(nèi)容包括當(dāng)前狀態(tài)、容器運行的命令以及網(wǎng)絡(luò)端口
docker-compose down
停止并刪除運行中的 Compose 應(yīng)用
它會刪除容器和網(wǎng)絡(luò),但是不會刪除卷和鏡像
3.docker-compose.yml文件配置
1. image
services:
web:
image: hello-world
在 services 標(biāo)簽下的第二級標(biāo)簽是 web,這個名字是用戶自己自定義,它就是服務(wù)名稱。 image 則是指定服務(wù)的鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試?yán)∵@個鏡像。 例如下面這些格式都是可以的:
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
2. build
服務(wù)除了可以基于指定的鏡像,還可以基于一份 Dockerfile,在使用 up 啟動之時執(zhí)行構(gòu)建任務(wù),這個構(gòu)建標(biāo)簽就是 build,它可以指定 Dockerfile 所在文件夾的路徑。Compose 將會利用它自動構(gòu)建這個鏡像,然后使用這個鏡像啟動服務(wù)容器。
build: /path/to/build/dir
也可以是相對路徑,只要上下文確定就可以讀取到 Dockerfile。
build: ./dir
設(shè)定上下文根目錄,然后以該目錄為準(zhǔn)指定 Dockerfile。
build:
context: ../
dockerfile: path/of/Dockerfile
注意 build 都是一個目錄,如果你要指定 Dockerfile 文件需要在 build 標(biāo)簽的子級標(biāo)簽中使用 dockerfile 標(biāo)簽指定,如上面的例子。 如果你同時指定了 image 和 build 兩個標(biāo)簽,那么 Compose 會構(gòu)建鏡像并且把鏡像命名為 image 后面的那個名字。
build: ./dir
image: webapp:tag
既然可以在 docker-compose.yml 中定義構(gòu)建任務(wù),那么一定少不了 arg 這個標(biāo)簽,就像 Dockerfile 中的 ARG 指令,它可以在構(gòu)建過程中指定環(huán)境變量,但是在構(gòu)建成功后取消,在 docker-compose.yml 文件中也支持這樣的寫法:
build:
context: .
args:
buildno: 1
password: secret
下面這種寫法也是支持的,一般來說下面的寫法更適合閱讀。
build:
context: .
args:
- buildno=1
- password=secret
與 ENV 不同的是,ARG 是允許空值的。例如:
args:
- buildno
- password
這樣構(gòu)建過程可以向它們賦值。
注意:YAML 的布爾值(true, false, yes, no, on, off)必須要使用引號引起來(單引號、雙引號均可),否則會當(dāng)成字符串解析。
3. command
使用 command 可以覆蓋容器啟動后默認(rèn)執(zhí)行的命令。
command: bundle exec thin -p 3000
也可以寫成類似 Dockerfile 中的格式:
command: [bundle, exec, thin, -p, 3000]
4.container_name
前面說過 Compose 的容器名稱格式是:<項目名稱><服務(wù)名稱><序號> 雖然可以自定義項目名稱、服務(wù)名稱,但是如果你想完全控制容器的命名,可以使用這個標(biāo)簽指定:
container_name: app
這樣容器的名字就指定為 app 了。
5.depends_on
在使用 Compose 時,最大的好處就是少打啟動命令,但是一般項目容器啟動的順序是有要求的,如果直接從上到下啟動容器,必然會因為容器依賴問題而啟動失敗。 例如在沒啟動數(shù)據(jù)庫容器的時候啟動了應(yīng)用容器,這時候應(yīng)用容器會因為找不到數(shù)據(jù)庫而退出,為了避免這種情況我們需要加入一個標(biāo)簽,就是 depends_on,這個標(biāo)簽解決了容器的依賴、啟動先后的問題。 例如下面容器會先啟動 redis 和 db 兩個服務(wù),最后才啟動 web 服務(wù):
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注意的是,默認(rèn)情況下使用 docker-compose up web 這樣的方式啟動 web 服務(wù)時,也會啟動 redis 和 db 兩個服務(wù),因為在配置文件中定義了依賴關(guān)系。
6.dns
和--dns參數(shù)一樣用途,格式如下:
dns: 8.8.8.8
也可以是一個列表:
dns:
- 8.8.8.8
- 9.9.9.9
此外 dns_search 的配置也類似:
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
7. tmpfs
掛載臨時目錄到容器內(nèi)部,與 run 的參數(shù)一樣效果:
tmpfs: /run
tmpfs:
- /run
- /tmp
8. expose
這個標(biāo)簽與Dockerfile中的EXPOSE指令一樣,用于指定暴露的端口,但是只是作為一種參考,實際上docker-compose.yml的端口映射還得ports這樣的標(biāo)簽。
expose:
- "3000"
- "8000"
9. external_links
在使用Docker過程中,我們會有許多單獨使用docker run啟動的容器,為了使Compose能夠連接這些不在docker-compose.yml中定義的容器,我們需要一個特殊的標(biāo)簽,就是external_links,它可以讓Compose項目里面的容器連接到那些項目配置外部的容器(前提是外部容器中必須至少有一個容器是連接到與項目內(nèi)的服務(wù)的同一個網(wǎng)絡(luò)里面)。 格式如下:
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
10. extra_hosts
添加主機名的標(biāo)簽,就是往/etc/hosts文件中添加一些記錄,與Docker client的--add-host類似:
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
啟動之后查看容器內(nèi)部hosts:
162.242.195.82 somehost
50.31.209.229 otherhost
復(fù)制Error復(fù)制成功...
11. logging
這個標(biāo)簽用于配置日志服務(wù)。格式如下:
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
默認(rèn)的driver是json-file。只有json-file和journald可以通過docker-compose logs顯示日志,其他方式有其他日志查看方式,但目前Compose不支持。對于可選值可以使用options指定。 有關(guān)更多這方面的信息可以閱讀官方文檔: https://docs.docker.com/engine/admin/logging/overview/
12. ports
映射端口的標(biāo)簽。 使用HOST:CONTAINER格式或者只是指定容器的端口,宿主機會隨機映射端口。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
13. volumes
掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器,可以直接使用 [HOST:CONTAINER] 這樣的格式,或者使用 [HOSTCONTAINERro] 這樣的格式,后者對于容器來說,數(shù)據(jù)卷是只讀的,這樣可以有效保護(hù)宿主機的文件系統(tǒng)。 Compose的數(shù)據(jù)卷指定路徑可以是相對路徑,使用.或者..來指定相對目錄。 數(shù)據(jù)卷的格式可以是下面多種形式:
volumes:
// 只是指定一個路徑,Docker 會自動在創(chuàng)建一個數(shù)據(jù)卷(這個路徑是容器內(nèi)部的)。
- /var/lib/mysql
// 使用絕對路徑掛載數(shù)據(jù)卷
- /opt/data:/var/lib/mysql
// 以 Compose 配置文件為中心的相對路徑作為數(shù)據(jù)卷掛載到容器。
- ./cache:/tmp/cache
// 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
// 已經(jīng)存在的命名的數(shù)據(jù)卷。
- datavolume:/var/lib/mysql
如果你不使用宿主機的路徑,你可以指定一個volume_driver。
volume_driver: mydriver
14. volumes_from
從其它容器或者服務(wù)掛載數(shù)據(jù)卷,可選的參數(shù)是 :ro或者 :rw,前者表示容器只讀,后者表示容器對數(shù)據(jù)卷是可讀可寫的。默認(rèn)情況下是可讀可寫的。
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
15. network_mode
網(wǎng)絡(luò)模式,與Docker client的--net參數(shù)類似,只是相對多了一個service:[service name] 的格式。 例如:
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
可以指定使用服務(wù)或者容器的網(wǎng)絡(luò)
16. networks
加入指定網(wǎng)絡(luò),格式如下:
services:
some-service:
networks:
- some-network
- other-network
關(guān)于這個標(biāo)簽還有一個特別的子標(biāo)簽aliases,這是一個用來設(shè)置服務(wù)別名的標(biāo)簽,例如:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2
相同的服務(wù)可以在不同的網(wǎng)絡(luò)有不同的別名
4.使用docker-compose
服務(wù) (service):一個應(yīng)用容器
項目 (project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個完整業(yè)務(wù)單元
可見,一個項目可以由多個服務(wù)(容器)關(guān)聯(lián)而成,Compose 面向項目進(jìn)行管理
部署flask+mysql+redis服務(wù)
創(chuàng)建三個文件夾及docker-compose.yml文件:
flask構(gòu)建鏡像文件:
配置docker-compose.yml文件
version: '3'
services:
redis:
image: redis
expose:
- 6379
ports:
- "6399:6379"
mysql:
image: mysql:5.7
expose:
- 3306
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: python
MYSQL_USER: root
volumes:
- ./02_mysql:/var/lib/mysql
flask:
build: ./01_flask
volumes:
- ./01_flask/project:/home/project
ports:
- "8883:5000"
depends_on:
- mysql
- redis
該路徑下執(zhí)行命令
docker-compose up
停止并刪除容器文章來源:http://www.zghlxwxcb.cn/news/detail-690184.html
總結(jié)
docke日常部署服務(wù)非常便捷,啟動速度都是秒級,對與虛擬機而言輕量快捷,而且一個docker鏡像可以啟動多個容器,構(gòu)建一個自己需要的定制化鏡像,所有平臺都可以暢快使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-690184.html
到了這里,關(guān)于docker及docker-compose安裝及使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!