Dokcer的三大核心概念
1、鏡像(image)
簡單了解:鏡像是建立一個docker容器的基礎、前提條件。就好比你安裝一個軟體需要一個安
裝包一樣,你要安裝QQ就需要下載下傳一個QQ的安裝包;假如你需要建構一個mysql容器就需要一
個mysql的鏡像。
2、容器(container)
簡單了解:容器是從鏡像建立的應用運作執行個體,可以将其啟動、開始、停止、删除,而這些容器
都是互相隔離、互不可見的。就好比你現在裝了一個QQ的可執行檔案QQ.exe,你可以去運(啟
動、開始)它,也可以關閉(停止)它,也可以解除安裝(删除)它,當你把它解除安裝後,想要再次運作,
你就得再一次通過安裝包去安裝(通過鏡像去建構容器)。
3、倉庫(repository)
簡單了解:倉庫就是存放一個個鏡像的地方,下載下傳鏡像就是從倉庫去下載下傳。類似于maven中的中
央倉庫一樣。
一、Docker操作指令
# 下載下傳鏡像,不加版本号,預設下載下傳最新版本的鏡像
docker pull [鏡像名]:[版本号]
# 列出所有鏡像 列出指定[鏡像名]:[版本号]的鏡像
docker images
docker image ls [鏡像名]:[版本号]
# 删除鏡像 選項: -f --->強制删除
docker rmi [選項][鏡像名]:[版本号]
# 建立并啟動容器
docker run [選項] [鏡像名]:[版本号] [參數]
常用選項:
--name 給容器起一個名字
-p 映射端口 -p [主控端端口]:[容器端口]
-v 映射資料卷
-d 背景運作容器
-it 進入容器
栗子:
docker run --name tomcat -p 8080:8080 -v /home/zsm/webapps:/usr/local/apache8.0/webapps/ -d [鏡像名]:[版本号]
# 進入容器
docker exec -it [容器id] [參數]
選項:
-it 以互動式進入容器
參數通常指定終端 /bin/bash
栗子:
docker exec -it [容器id] /bin/bash
# 檢視容器
docker ps --->檢視目前正在運作的容器
docker ps -a --->檢視目前有的所有容器
# 删除容器
docker rm [容器id] ---> 删除指定[容器id]的容器
二、Dockerfile
什麼是Dockerfile?
簡單了解: 用來建構自定義鏡像的一組指令的檔案!
栗子: 建構一個ubuntu:18.04鏡像的Dockerfile檔案内容
# 基礎鏡像 ubuntu
FROM ubuntu:18.04
# 複制jdk到容器/usr/local目錄
COPY jdk-8u221-linux-x64.tar.gz /usr/local/
#進入容器/usr/local目錄
WORKDIR /usr/local/
# 解壓jdk并删除jdk壓縮包
RUN tar -zxf jdk-8u221-linux-x64.tar.gz && rm -rf jdk-8u221-linux-x64.tar.gz
# 配置環境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_221/
ENV CLASSPATH ${JAVA_HOME}/lib;${JAVA_HOME}/jre/lib;
ENV PATH $PATH: ${JAVA_HOME}/bin
# 複制 tomcat 安裝包
ADD apache-tomcat-9.0.26.tar.gz /usr/local/
# 删除 tomcat壓縮包
RUN rm -rf apache-tomcat-9.0.26.tar.gz
# 運作run 容器的時候執行,啟動tomcat
CMD ["/usr/local/apache-tomcat-9.0.26/bin/catalina.sh","run"]
# 注意: COPY、ADD等指令操作的檔案必須和Dockerfile在同一個目錄下或是在Dockerfile目前目錄的子目錄,不能是Dockerfile目錄的外層目錄!
# 通過Dockerfile自動建構鏡像
docker build -t [建構的鏡像名]:[版本号] -f [Dockerfile檔案的目錄]
# 注意: -f ./ 代表目前目錄,若Dockerfile的名字預設為Dockerfile,也可以不叫Dockerfile,此時需要帶上Dockerfile的名稱.
# 假設Dockerfile的名字叫Dockerfile2
栗子:
docker build -t build -t [建構的鏡像名]:[版本号] -f ./Dockerfile

三、Docker-compose
Docker-compose的作用:
可以一次性啟動多個服務(容器),不用再通過docker run 的指令去一個一個的啟動容器!
# 指定docker-compose的版本
version: '3'
# 要啟動的服務
services:
app-account:
# 表示從dockerfile檔案中建構鏡像 build和image指令在一個服務中隻能二選一
build: ./account/
# 容器名
container_name: app-account
# 如果容器崩了自動重新開機
restart: always
# 映射資料卷
volumes:
- /opt/java/tomcat/webapps:/usr/local/apache-tomcat-9.0.24/webapps
# 映射端口号
ports:
- 8080:8080
mysql:
# 從倉庫下載下傳鏡像
image: mysql:5.7.22
restart: always
container_name: mysql
ports:
- '3308:3306'
# 配置環境變量
environment:
# root使用者的密碼
MYSQL_ROOT_PASSWORD: root
# 建立一個mysql使用者
MYSQL_USER: mysql
# mysql使用者的密碼為mysql
MYSQL_PASSWORD: mysql
# 建立一個test_db資料庫
MYSQL_DATABASE: test_db
# 時區
TZ: Asia/Shanghai
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
# 資料卷映射
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/log:/var/log/mysql
- ./mysql/config:/etc/mysql
---------------------------------------------------------------------
指令行(在docker-compose.yml檔案的目錄下): docker-compose up -d
通過docker-compose.yml檔案背景啟動多個services服務(容器)
新手上路,以上純屬個人見解,歡迎了解更深刻的各位前輩指點!