柚子快報激活碼778899分享:大數(shù)據(jù) Docker
柚子快報激活碼778899分享:大數(shù)據(jù) Docker
目錄
1、 什么是Docker
2、安裝Docker
CtenOS7:
win
ubuntu
3、Docker架構
4、配置Docker鏡像加速器
5、Docker服務相關命令
6、Docker 鏡像相關的命令
7、Docker 容器相關命令(重要)
8、Docker容器的數(shù)據(jù)卷(共享文件夾)
8.1 思考
8.2 數(shù)據(jù)卷
8.2.1 配置數(shù)據(jù)卷
?8.2.2 數(shù)據(jù)卷容器
9、Docker應用部署
9.1 Mysql 部署
需求
實現(xiàn)步驟
注意:
1、搜索Mysql 鏡像
2、拉起Mysql鏡像
3、創(chuàng)建容器 包含內容有mysql:5.6
4、查看docker容器中是否存在mysql
9.2 Tomcat 部署
需求:
實現(xiàn)步驟
9.3 Nginx 部署
需求:
實現(xiàn)步驟:
9.4 Redis 部署
需求:
實現(xiàn)步驟:
10、DockerFile
docker 鏡像原理
操作系統(tǒng)組成部分:
制作鏡像(重點)
1、容器轉為鏡像
2、dockerfile
3、定義dockerfile 發(fā)布springboot項目
3、自定義ubuntu鏡像
11、Docker 服務編排
1、服務編排概念
2、Docker Compose概述
2.1 安裝 Docker Compose
2.2? 卸載docker Compose
2.3 使用dockercompose 編排nginx+springboot 項目
12、Docker 私有倉庫
1、搭建私有倉庫
?編輯
2、上傳鏡像到私有倉庫
3、從私有倉庫拉取鏡像
13、Docker 相關概念
docker容器虛擬化與傳統(tǒng)虛擬機比較
1、 什么是Docker
Docker是一個開源的應用容器引擎;誕生于2013年初,基于Go語言實現(xiàn),doCloud公司出品(改名為Docker Inc);Docker可以讓開者打包他們的運用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的Linux機器上。容器時完全使用沙箱機制,相互隔離;容器性能開銷極低。Docker從17.03版本之后分為CE(CommunityEdition:社區(qū)版(免費))和EE(Enterprise Edition:企業(yè)版(收費))
小結:docker是一種容器技術,解決軟件跨環(huán)境遷移問題
2、安裝Docker
Docker可以運行在MAC,Windows,CtenOS,UBUNTU等操作系統(tǒng)上。官網(wǎng)
Docker: Accelerated, Containerized Application Development
CtenOS7:
#1、yum 包更新到最新
yum update
#2、安裝需要的軟件包,yun-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴
yum install -y yun -utils device-mapper-persistent-data lvm2
#3、 設置yum源
yum-config-manger --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#4、 安裝docker,出現(xiàn)輸入的界面都按 y
yum install -y docker-ce
#5、 查看docker版本,驗證是否驗證成功
docker -v
安裝完成即可看到版本就安裝成功
當下載失敗就繼續(xù)執(zhí)行
yum install -y docker-ce
win
下載路徑:Index of win/static/stable/x86_64/
ubuntu
1、安裝docker:sudo apt-get install -y docker.io
2、啟動docker服務:systemctl start docker
3、設置開機啟動:systemctl enable docker
4、查看docker狀態(tài):systemctl status docker
5、停止docker服務:systemctl stop docker
6、查看docker版本:docker version
3、Docker架構
?鏡像(image):Docker鏡像,就相當于是一個root文件系統(tǒng)。比如官方鏡像Ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系統(tǒng)的root文件系統(tǒng)。容器(Container):鏡像和容器的關系,就像是面向對象程序設計中的類和對象一樣,鏡像是靜態(tài)的定義嗎,容器時鏡像運行時實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。倉庫(Repository):倉庫可以看成一個代碼控制中心,用來保存鏡像。
4、配置Docker鏡像加速器
默認情況下,將來熊docker hub(https://hub.docker.com/)上下載docker鏡像,太慢。一般都會配置鏡像加速器。
USTC:中科大鏡像加速器(https://docker.mirrors.ustc.edu.cn)需要到相應的配置文件中更改其配置阿里云:(登陸阿里云,會生成一個自己獨有的加速器地址,直接黏貼即可)騰訊云: 與阿里云類似網(wǎng)易云: 與阿里云類似
配置:
將其命令中的代碼都復制過來直接執(zhí)行即可;
如果使用的是中科大鏡像加速鏡像那么就將daemon.json 中的
替換一下即可;
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5、Docker服務相關命令
啟動docker服務: # centos 7
systemctl start docker 停止docker服務: #停止 centos7
systemctl stop docker 重啟docker服務: #重啟 centos7
systemctl restart docker 查看docker服務狀態(tài): #查看狀態(tài) centos7
systemctl status docker 開機啟動docker服務: #開機啟動docker
systemctl enable docker
6、Docker 鏡像相關的命令
查看鏡像:# 查看本地鏡像
docker images 搜索鏡像:# 搜索 decker search +名稱
decker search redis
拉起鏡像:(下載)# 下載/拉取 docker pull redis:版本號 例如:docker pull redis:5.0
# 當不寫版本號則下載的版本為最新版本 latest
# 拉取鏡像時需要版本號可以到 https://hub.docker.com/ 中查看
docker pull redis 刪除鏡像: # 刪除 docker rmi de25a81a5a0b
# 也可以通過 REPOSITORY和TAG進行刪除 docker rmi redis:latest
docker rmi +(image ID編號)
docker rmi + (軟件名:版本號)
#---查看所有進行id
docker images -q
#----刪除所有鏡像------
docker rmi `docker images -q`
通過docker 下載軟件可以去官網(wǎng)查看,默認下載是最新版本
Docker Hub
版本信息
在下載時需要軟件名和版本號之間用 : 隔開
docker? pull? redis:5.0
?official 下 [OK] 表示是官方版本
7、Docker 容器相關命令(重要)
查看容器: #查看鏡像
docker images
#查看容器 只能查看開啟的
docker ps
#查看歷史容器
docker ps -a
創(chuàng)建容器: 方式1
#docker run -it --name=c1 centos:7 /bin/bash
#-i 表示容器一直運行,如果沒有-i,那么沒有容器鏈接那就會自動關閉容器
# -it 其中t:表示分配終端接收命令 (交互式)
# --name=c1: :--name=這里是給容器取名稱;名稱可以隨便??;--name+空格和名稱/--name=名稱
# centos:7 :指定基礎版本,版本用":"隔開
#/bin/bash :打開窗口
# 通過-it創(chuàng)建的容器當退出容器后會自動關閉;通過 ps:查看不到
# 通過 exit 退出后就會關閉
docker run -it --name=c1 /bin/bash
#方式2
#d 后臺創(chuàng)建容器;通過-id創(chuàng)建的話rxit退出不會自動關閉 -id創(chuàng)建的是(守護式)
#進入容器:通過-id創(chuàng)建的容器創(chuàng)建完成不會自動進入
# 通過 exit 退出后不會關閉
docker run -id --name=c2 centos:7
#進入容器 t表示接受終端命令
docker exec -it c2 /bin/bash
表示已經(jīng)進入了 容器; 啟動容器: # c2:容器名稱
docker start c2 停止容器: # c2:表示容器名稱
docker stop c2 刪除容器: #刪除 rm 后跟容器id/名稱
docker rm c2
#刪除所有的容器
docker rm `docker pa aq`
#查看所有日期的id
docker ps -aq
注意:開啟的容器不能刪除 查看容器信息:? #c2:表示容器名稱
docker inspect c2 退出容器 exit ?進入容器: #進入容器 t表示接受終端命令 c2是容器名稱
docker exec -it c2 /bin/bash
8、Docker容器的數(shù)據(jù)卷(共享文件夾)
查看docker容器配置文件:
cd /var/lib/docker/containers/容器id/config.v2.json
8.1 思考
Docker? 容器刪除后,在容器中產(chǎn)生的數(shù)據(jù)還在嗎?Docker 容器和外部及其可以直接交換文件嗎?容器之間相互進行數(shù)據(jù)交互?
1、外部及其與容器之間是不互通的,但是外部及其與宿主機器互通
2、容器之間交換數(shù)據(jù)
?
8.2 數(shù)據(jù)卷
數(shù)據(jù)卷是宿主機中的一個目錄或文件當容器目錄和數(shù)據(jù)卷目錄綁定后,對方的修改會立即同步一個數(shù)據(jù)卷可以被多個容器同時掛載一個容器也可以被掛在多個數(shù)據(jù)卷
作用:
容器數(shù)據(jù)持久化外部及其和容器間接通信容器之間數(shù)據(jù)交換
8.2.1 配置數(shù)據(jù)卷
創(chuàng)建啟動容器時,使用 -v 參數(shù)設置數(shù)據(jù)卷
docker run? ..? -v? 宿主機目錄(文件):? 容器內目錄(文件)
注意事項:
目錄必須是絕對路勁如果目錄不存在,會自動創(chuàng)建可以掛在多個數(shù)據(jù)卷
?
?8.2.2 數(shù)據(jù)卷容器 ?
所容器進行數(shù)據(jù)交換:
??????? 1、多個容器掛在同一個數(shù)據(jù)卷
??????? 2、數(shù)據(jù)卷容器
配置數(shù)據(jù)卷容器
1、創(chuàng)建啟動c3 數(shù)據(jù)卷容器,使用 -v? 參數(shù)設置數(shù)據(jù)卷
?2、創(chuàng)建啟動? c1? c2? 容器,使用? --volumes-form 參數(shù) 設置數(shù)據(jù)卷
3、將創(chuàng)建完成的容器綁定到數(shù)據(jù)卷中
docker run -it -v /myDataVolume:/dataVolumerContainer centos
數(shù)據(jù)卷:
1、數(shù)據(jù)卷概念:
??????? 宿主機的一個目錄或文件
2、數(shù)據(jù)卷作用
??????? 容器數(shù)據(jù)持久化
??????? 客戶端和容器數(shù)據(jù)交換
??????? 容器間數(shù)據(jù)交換
3、數(shù)據(jù)卷容器
??????? 創(chuàng)建一個容器,掛在一個木蘭路,讓其他容器繼承自該容器(--volume-from)
??????? 通過簡單方式實現(xiàn)數(shù)據(jù)卷配置
9、Docker應用部署
9.1 Mysql 部署
需求
在docker容器中部署Mysql,并通過外部的Mysql客戶端操作Mysql數(shù)據(jù)庫
實現(xiàn)步驟
搜索Mysql鏡像拉起mysql鏡像創(chuàng)建容器操作容器中的Mysql
注意:
容器內的網(wǎng)絡服務和外部機器不能直接通信外部機器和宿主機可以直接通信宿主機和容器可以直接通信當容器中的網(wǎng)絡服務需要被外部機器訪問時,可以將容器中提供服務的端口映射到宿主機的端口上。外部術器訪問宿主機的該端口,從而間接訪問容器的服務。這種操作稱為:端口映射
1、搜索Mysql 鏡像
docker search mysql
2、拉起Mysql鏡像
docker pull mysql:5.6
3、創(chuàng)建容器 包含內容有mysql:5.6
在 root 目錄下創(chuàng)建mysql目錄用于存儲mysql數(shù)據(jù)信息
mkdir /roo/mysql
cd /root/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/confi.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
參數(shù)說明
-p 3307:3306 :將容器 3306端口映射到宿主機的 3307端口
-v $PWD/config:/etc/mysql/conf.d:將主機當前目錄下的 config/mysql.conf 掛載到容器的/etc/mysql/my.conf。配置目錄
-v $PWD/logs:/logs :將主機當前目錄下的logs目錄掛載到容器的/logs。的日志目錄
-v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛在到容器的:/var/lib/mysql 。數(shù)據(jù)目錄
-e MYSQL_ROOT_PASSWORD=123456 :mysql 初始化root用戶密碼
4、查看docker容器中是否存在mysql
第一步:就去容器
docker exec -it c_mysql /bin/bash
第二步:鏈接mysql
mysql -uroot -p123456
第三部:測試外部鏈接mysql
容器和宿主機之間的端口映射是:3306-->3307
9.2 Tomcat 部署
需求:
在docker容器中部署tomcat,通過外部機器訪問Tomcat部署項目。
實現(xiàn)步驟
1)搜索Tomcat鏡像
docker images # 查看有那些鏡像
docker search tomcat
2)拉取Tomcat鏡像
docker pull tomcat
3)創(chuàng)建容器
# 在root目錄下創(chuàng)建Tomcat目錄用于存儲Tomcat數(shù)據(jù)信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/webapps \
tomcat
?參數(shù)說明:
??????? -p 8080:8080:將日期的8080端口映射到主機的8080 端口
??????? -v $PWD:/user/local/tomcat/webapps:將主機中當前目錄掛在到容器的webapps
?進入c_tomcat:
docker exec -it c_tomcat /bin/bash
4)部署項目
在 tomcat 目錄下穿件一個index.html 文件在里面寫入內容即可查看
5)測試訪問
http://127.0.0.1:8080/index.html
9.3 Nginx 部署
需求:
??????? 在docker 容器中部署Nginx,并通過外部及其訪問Nginx;
實現(xiàn)步驟:
1)搜索Nginx鏡像
docker images
docker search naginx
2)拉取Nginx鏡像
docker pull nginx
3)創(chuàng)建容器
# 在/root 目錄下創(chuàng)建Nginx目錄用于存儲Nginx數(shù)據(jù)
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
#在~/nginx/conf/下創(chuàng)建ngingx.conf文件,粘貼下面內容
vim nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
# 在上述的 nginx目錄中使用
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
參數(shù)說明:
??????? -p 81:80:將容器的80 單口映射到主機的81端口
??????? -v $PWD/conf/nginx.conf/etc/nginx/nginx.conf:將主機當前目錄下的/conf/nginx.conf掛在到容器的:/etc/ngingx/nginx.conf。配置目錄
??????? -v? $PWD/logs:/var/log/nginx:將主機當前目錄下的logs目錄掛在到容器的/var/log/nginx。日志目錄
4)測試訪問
在nginx目錄下的html目錄下創(chuàng)建index.html文件
9.4 Redis 部署
需求:
在docker容器中部署Redis,并通過外部及其訪問Redis
實現(xiàn)步驟:
1)搜索redis鏡像
docker search redis
2)拉取redis鏡像
docker pull redis:5.0
3)創(chuàng)建容器
docker run -id --name=c_redis -p 6380:6379 redis:5.0
參數(shù)說明:
??????? 6380:6379:將容器內6379映射到外部機器的6380
4)訪問容器
./redis-cli.exe -h 192.168.149.135 -p 6380
10、DockerFile
docker 鏡像原理
docker鏡像本質是什么?
docker操作系統(tǒng)的ISO鏡像為什么只有200MB,而一個centos操作系統(tǒng)ios 文件需要幾個G?
docker中一個tomcat鏡像為什么有500MB,而一個tomcat安裝包只有70MB?
操作系統(tǒng)組成部分:
進程調度子系統(tǒng)進程通信子系統(tǒng)內存管理子系統(tǒng)設備管理子系統(tǒng)網(wǎng)絡通信子系統(tǒng)網(wǎng)絡通信子系統(tǒng)作業(yè)控制子系統(tǒng)
linux 文件系統(tǒng)由bootfs 和rootfs兩部分組成
??????? bootfs:包含bootloaber(引導加載程序)和kernel(內核)
??????? rootfs:root 文件系統(tǒng),包含的就是典型Linux系統(tǒng)中的/div,/proc,/bin,/etc等表中目錄和文件
??????? 不同的linux發(fā)行版,bootfs基本一樣,二rootfs不同,如ubuntu,contos等
docker鏡像是由特殊的文件系統(tǒng)疊加而成
最底端是bootfs,并使用宿主機的bootfs
第二層是root文件系統(tǒng)rootfs,稱為base image
然后再往上可以疊加其他的鏡像文件
統(tǒng)—文件系統(tǒng)(Union File System)技術能夠將不同的層整合成一個文件系統(tǒng),為這些層提供了一個統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統(tǒng)。
一個鏡像可以放在另一個鏡像的上面。位于下面的鏡像稱為父鏡像,最底部的鏡像成為基礎鏡像。
當從一個鏡像啟動容器時,Docker會在最頂層加載一個讀寫文件系統(tǒng)作為容器
docker鏡像的本質是什么?
是一個分層的文件系統(tǒng)
docker操作系統(tǒng)的ISO鏡像為什么只有200MB,而一個centos操作系統(tǒng)ios 文件需要幾個G?
Contos的ISO文件包含bootfs和rootfs,而docker的contos 鏡像復用操作系統(tǒng)boofts,只有rootfs和其他鏡像層
docker中一個tomcat鏡像為什么有500MB,而一個tomcat安裝包只有70MB?
由于docker中鏡像是分層的,tomcat雖然只有70MB,但他需要依賴于父鏡像和基礎鏡像,所有整體個對外暴露的tomcat鏡像大小500多MB
制作鏡像(重點)
docker如何制作?
1、容器轉為鏡像
docker commit?? 容器id 鏡像名稱:版本號
root@yjc-virtual-machine:/home/docker_list# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b56872446588 redis "docker-entrypoint.s…" 34 minutes ago Up 34 minutes 0.0.0.0:6380->6379/tcp, :::6380->6379/tcp c_redis
0c04be8c5826 nginx "/docker-entrypoint.…" 47 minutes ago Up 47 minutes 0.0.0.0:81->80/tcp, :::81->80/tcp c_nginx
440e7a321273 tomcat "catalina.sh run" 3 hours ago Up 3 hours 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp c_tomcat1
4c46777a1b78 tomcat "catalina.sh run" 3 hours ago Up 3 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp c_tomcat
3a05eac51d11 mysql:latest "docker-entrypoint.s…" 4 hours ago Up 4 hours 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp c_mysql
783549c44e76 ubuntu:latest "/bin/bash" 8 weeks ago Exited (255) 5 weeks ago ubuntu04
7927feb341e4 ubuntu:latest "bash" 8 weeks ago Exited (255) 5 weeks ago ubuntu02
33b57fbc8f31 ubuntu:latest "bash" 8 weeks ago Exited (0) 7 weeks ago ubuntu01
root@yjc-virtual-machine:/home/docker_list# docker commit b56872446588 xidida_redis:1.0
sha256:180250b577c60a791aa31e25d9a6115eb4602954d9971385190d116bf64ed2ec
root@yjc-virtual-machine:/home/docker_list# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xidida_redis 1.0 180250b577c6 2 minutes ago 113MB
nginx latest 605c77e624dd 17 months ago 141MB
tomcat latest fb5657adc892 17 months ago 680MB
openjdk 8 e24ac15e052e 17 months ago 526MB
redis latest 7614ae9453d1 17 months ago 113MB
mysql latest 3218b38490ce 17 months ago 516MB
ubuntu latest ba6acccedd29 19 months ago 72.8MB
root@yjc-virtual-machine:/home/docker_list#
docker? save? -o ? 壓縮文件名稱? 鏡像名稱:版本號????????
?
root@yjc-virtual-machine:/home/docker_list# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xidida_redis 1.0 180250b577c6 7 minutes ago 113MB
nginx latest 605c77e624dd 17 months ago 141MB
tomcat latest fb5657adc892 17 months ago 680MB
openjdk 8 e24ac15e052e 17 months ago 526MB
redis latest 7614ae9453d1 17 months ago 113MB
mysql latest 3218b38490ce 17 months ago 516MB
ubuntu latest ba6acccedd29 19 months ago 72.8MB
root@yjc-virtual-machine:/home/docker_list# docker save -o redis.tar xidida_redis:1.0
root@yjc-virtual-machine:/home/docker_list# ll
總用量 113620
drwxr-xr-x 10 root root 4096 6月 5 18:00 ./
drwxr-xr-x 5 root root 4096 6月 5 13:24 ../
drwxr-xr-x 2 root root 4096 6月 5 13:26 conf/
drwxr-xr-x 7 999 root 4096 6月 5 13:29 data/
drwxr-xr-x 2 root root 4096 6月 5 13:26 logs/
drwxr-xr-x 2 root root 4096 6月 5 13:25 mysql/
drwxr-xr-x 2 root root 4096 6月 5 16:58 nginx/
drwxr-xr-x 2 root root 4096 6月 5 17:13 redis/
-rw------- 1 root root 116303872 6月 5 18:00 redis.tar
drwxr-xr-x 3 root root 4096 6月 5 14:43 tomcat/
drwxr-xr-x 2 root root 4096 6月 5 14:17 webapps/
docker?? load? -i ? 壓縮文件名稱
root@yjc-virtual-machine:/home/docker_list# docker rmi 180250b577c6 # 刪除原來的鏡像
Untagged: xidida_redis:1.0
Deleted: sha256:180250b577c60a791aa31e25d9a6115eb4602954d9971385190d116bf64ed2ec
root@yjc-virtual-machine:/home/docker_list# docker images # 查看鏡像列表
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 17 months ago 141MB
tomcat latest fb5657adc892 17 months ago 680MB
openjdk 8 e24ac15e052e 17 months ago 526MB
redis latest 7614ae9453d1 17 months ago 113MB
mysql latest 3218b38490ce 17 months ago 516MB
ubuntu latest ba6acccedd29 19 months ago 72.8MB
root@yjc-virtual-machine:/home/docker_list# docker load -i redis.tar # 恢復鏡像
Loaded image: xidida_redis:1.0
root@yjc-virtual-machine:/home/docker_list# docker images # 恢復后的鏡像列表
REPOSITORY TAG IMAGE ID CREATED SIZE
xidida_redis 1.0 180250b577c6 41 hours ago 113MB
nginx latest 605c77e624dd 17 months ago 141MB
tomcat latest fb5657adc892 17 months ago 680MB
openjdk 8 e24ac15e052e 17 months ago 526MB
redis latest 7614ae9453d1 17 months ago 113MB
mysql latest 3218b38490ce 17 months ago 516MB
ubuntu latest ba6acccedd29 19 months ago 72.8MB
# 運行容器
root@yjc-virtual-machine:/home/docker_list# docker run -it --name=new_redis xidida_redis:1.0 bash
root@c79bc99c2001:/data#
2、dockerfile
Dockerfile概念
dockerfile是一個文本文件包含了一條條的指令每一條指令構建一層,基于基礎鏡像,最終構建出一個新的鏡像對于開發(fā)人員:可以為開發(fā)團隊提供一個完全一直的開發(fā)環(huán)境對于測試人員:可以直接拿開發(fā)時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了對于運維人員:在部署時,可以實現(xiàn)應用的無縫移植
Docker網(wǎng)址:https://hub.docker.com/
FROM java:8
MAINTAINER xidida
ADD demo_springbook_docker.jar app.jar
CMD java -jar app.jar
關鍵字作用備注FROM指定父鏡像指定dockerfile基于那個image構建MAINTAINER作者信息用來標明這個dockerfile 誰寫的LABEL標簽用來標明dockerfile 的標簽可以使用label代替Maintainer最終都是在docker image基本信息中可以查看RUN執(zhí)行命令容器啟動執(zhí)行執(zhí)行一段命令默認是/bin/sh格式:RUNcommd 或者RUN['command',"param1",“param2”]CMD容器啟動口令提供啟動容器時候的默認命令和ENTRYPONT配合使用,格式CMD command param1? param2 或者 CMD ["command","param1","param2"]ENTRYPOINT入口一般在制作一些執(zhí)行就關閉的容器中會使用COPY復制文件build的時候復制文件到image中ADD添加文件build 的時候添加文件到image中不僅僅局限于當前build 上下文可以來源于遠程服務ENV環(huán)境變量指定build時環(huán)境變量可以在啟動的容器的時候通過-e覆蓋格式ENV? name=valueARG構建參數(shù)構建參數(shù) 只在構建的時候使用的參數(shù)? 如果有ENV那么ENV的相同名字的值始終覆蓋arg的參數(shù)VOLUME定義外部可以掛在的數(shù)據(jù)卷指定build 的image那些目錄可以啟動的時候掛載到文件系統(tǒng)中容器的時候使用-v綁定格式VOLUME["目錄"]EXPOSE暴露端口定義容器運行的時候監(jiān)聽的端口啟動容器的使用-p來綁定暴露的端口? 格式 EXPOSE? 8080 或者 EXPOSE 8080/udpWORKDIR工作目錄指定容器內部的工作目錄? 如果沒有創(chuàng)建則自動創(chuàng)建 如果指定/使用的是絕對地址 如果不是/開頭那么是在上一條workdir的路勁的相對路徑USER指定執(zhí)行用戶指定build或者啟動的時候 用戶在RUN CMD ENTRYPONT 執(zhí)行的時候的用戶HEALTHCHECK健康檢查指定檢測當前容器的健康檢測的命令? 基本上沒用? 因為很多時候? 應用本身有健康檢測機制ONBUILD觸發(fā)器當存在ONBUILD關鍵字的鏡像作為基礎鏡像的時候? 當執(zhí)行FROM 完成之后? 會執(zhí)行ONBUILD 的命令但是不影響當前鏡像 用處不怎么打STOPSIGNAL發(fā)送信號量到宿主機該STOPSIGNAL指令設置將發(fā)送到容器的系統(tǒng)調用信號以退出。SHELL指定執(zhí)行腳本的shell指定RUN? COMENTRYPOINT 執(zhí)行命令的時候使用的shell
3、定義dockerfile 發(fā)布springboot項目
將springboot項目打包
找到jar包
?
?實現(xiàn)步驟:
下載java:8
docker search java
docker pull java:8
1、定義父鏡像:FROM java8
2、定義作者:MAINTAINER? itheima
3、將jar包添加到容器:ADD?? springboot.jar?? app.jar
4、定義容器啟動執(zhí)行的命令:CMD java -jar app.jar
FROM java:8
MAINTAINER xidida
ADD demo_springbook_docker.jar app.jar
CMD java -jar app.jar
5、通過dockerfile構造鏡像:docker bulid -f? dockerfile 文件鏡像名稱:版本
docker build -f dockerfile文件名 -t 命名為:版本號 .
docker build -f ./demo_springbook_dockerfile -t app .
# 它會使用當前目錄下的demo_springbook_dockerfile文件來構建一個名為app的Docker鏡像。
# -f ./demo_springbook_dockerfile表示指定要使用的Dockerfile文件名為當前目錄下的demo_springbook_dockerfile
# -t app表示為構建的鏡像指定一個名稱(app)
# .表示從當前目錄開始構建。
?構建完成
?啟動 應用
docker run -id 鏡像名稱/鏡像ID
docker run -id app
docker run -id -p 本機端口:容器端口 46a1f6f4f5be
docker run -id -p 8084:8080 46a1f6f4f5be
?啟動成功,訪問
?java接口
3、自定義ubuntu鏡像
需求:
自定義ubuntu鏡像。要求
1、默認登陸路徑為/usr
2、可以使用vim
root@yjc-virtual-machine:/home/yjc# docker run -it --name=c4 ubuntu
實現(xiàn)步驟:
1、定義父鏡像:FROM? ubuntu:版本號
2、定義作者信息:??????? maintainer?? xidida
3、執(zhí)行安裝vim命令:RUN? apt update, apt install -y? vim
4、定義容器啟動執(zhí)行的命令:CMD? /bin/bash
docker build -f ./docker_file -t xidida_ubuntu:1 .
?
?
? 工具鏡像創(chuàng)建容器:
# 創(chuàng)建容器
docker run -it --name=xidida_ubuntu_c1 xidida_ubuntu:1
?
11、Docker 服務編排
1、服務編排概念
微服務架構的應用系統(tǒng)中一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟停,維護的工作量會很大。
要從Dockerfile build image或者去dockerhub拉取image要創(chuàng)建多個container要管理這些container (啟動停止刪除)
服務編排:按照一定的業(yè)務規(guī)則批量管理容器
?
2、Docker Compose概述
Docker Compose是一個編排多容器分布式部署的工具,提供命令集管理容器化應用的完整開發(fā)周期,包括服務構建,啟動和停止。使用步驟:
利用Dockerfile定義運行環(huán)境鏡像使用docker-compose.yml定義組成應用的各服務運行docker-composeup啟動應用
2.1 安裝 Docker Compose
Releases · docker/compose · GitHub
# sudo apt install curl
# Compose 目前已經(jīng)完全支持 Linux,Max OS和Windows,在外面安裝Compose之前,需要先安裝Docker。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 設置文件可執(zhí)行權限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version
2.2? 卸載docker Compose
# 二進制包方式安裝的,刪除二進制文件即可
rm /usr/local/docker-co,pose
2.3 使用dockercompose 編排nginx+springboot 項目
1、創(chuàng)建docker-compose目錄
mkdir ~/docker-compose
cd ~/docker-compose
2、編寫docker-compose.yml 文件
version: '3' # 版本
services:
naginx:
image: nginx
ports: # 端口映射
- 80:80
links:
- app
volumes: #掛在目錄
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
3、創(chuàng)建./nginx/conf.d目錄
mkdir -p ./nginx/conf.d
4、在./nginx/conf.d目錄下編寫 xidida.conf 文件
server {
listen 80;
access_log off;
location /{
proxy_pass http://app:8080;
}
}
12、Docker 私有倉庫
1、搭建私有倉庫
Docker官方的Dockerhub (https://hub.docker.com)是一個用于管理公共鏡像的倉庫,我們可以上面拉取鏡像到本地,也可以把我們自己的鏡像推送上去。但是,有時候我們的服務器無法訪問互聯(lián)網(wǎng),或者你不希望將自己的鏡像放到公網(wǎng)當中,那么我們就需要搭建自己的私有倉庫來存儲和管理自己的鏡像。
# 1、拉取私有倉庫鏡像
docker pull registry
#2、啟動私有倉庫容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打開瀏覽器 如數(shù)地址 http:// 私有倉庫服務器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有倉庫 搭建成功
# 4、修改 daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一個key ,保存退出。此步用于讓 docker 信任私有倉庫地址;注意私有服務器ip修改為自己私有倉庫服務器真實ip
{"insecure-registries":["私有倉庫服務器ip:5000"]}
#5、重啟 docker 服務器
systemctl restart docker
docker start registry
??
?http://192.168.183.138:5000/v2/_catalog
?
?
?
?
2、上傳鏡像到私有倉庫
# 1、 標記鏡像為私有倉庫的鏡像
docker tag centos:7 私有倉庫服務器IP:5000/centos:7
# 2、上傳標記的鏡像
docker push 私有倉庫服務器IP:5000/centos:7
?
?在打完標記后刪除最好按照名字刪除,如果使用id 刪除則會兩個都刪除
?
上傳完成可以查看:
3、從私有倉庫拉取鏡像
# 1、拉取鏡像
docker pull 鏡像名稱
13、Docker 相關概念
docker容器虛擬化與傳統(tǒng)虛擬機比較
容器就是將軟件打包成標準化單元,以用于開發(fā)、交付和部署。
容器鏡像是輕量的、可執(zhí)行的獨立軟件包,包含軟件運行所需的所有內容:代碼、運行時環(huán)境、系統(tǒng)工具、系統(tǒng)庫和設置。容器化軟件在任何環(huán)境中都能夠始終如一地運行。容器賦予了軟件獨立性,使其免受外在環(huán)境差異的影響,從而有助于減少團隊間在相同基礎設施上運行不同軟件時的沖突。
相同:
容器和虛擬機具有相似的資源隔離和分配優(yōu)勢
不同:
容器虛擬化的是操作系統(tǒng),虛擬機虛擬化的是硬件。傳統(tǒng)虛擬機可以運行不同的操作系統(tǒng),容器只能運行同一類型操作系統(tǒng)
?
?
?
?
柚子快報激活碼778899分享:大數(shù)據(jù) Docker
精彩內容
本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。