DOCKER入門
DOCKER入門
安裝docker
1、安裝前先卸載之前裝的docker,沒有安裝過跳過,卸載舊版本
[root@localhost ~] yum remove docker \
docker-client
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-1ogrotate \
docker-engine
2、安裝工具包
[root@localhost ~] yum install -y yum-utils
3、設(shè)置鏡像倉(cāng)庫(kù)(阿里云)
[root@localhost ~] yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.1 更新yum軟件包索引
[root@localhost ~]# yum makecache fast
3.2 安裝docker相關(guān)服務(wù)
[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io
4、啟動(dòng)docker
[root@localhost ~]# systemctl start docker
5、使用docker version 檢測(cè)是否安裝成功
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 26.1.4
API version: 1.45
Go version: go1.21.11
Git commit: 5650f9b
Built: Wed Jun 5 11:32:04 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.4
API version: 1.45 (minimum version 1.24)
Go version: go1.21.11
Git commit: de5c9cf
Built: Wed Jun 5 11:31:02 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.33
GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
查看安裝的鏡像
[root@localhost ~]# docker images
卸載docker
1、卸載依賴
[root@localhost ~]# yum remove docker-ce docker-ce-cli containerd.io
2、刪除資源
[root@localhost ~]# rm -rf /var/lib/docker
/var/lib/docker docker的默認(rèn)工作路徑
幫助命令
docker version #顯示docker的版本信息
docker info #顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量
docker 命令 --help #幫助命令
鏡像命令
查看所有本地的主機(jī)上的鏡像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rabbitmq 3.13-management b188af0de93c 6 months ago 251MB
mysql 5.7 5107333e08a8 9 months ago 501MB
解釋
REPOSITORY 鏡像的倉(cāng)庫(kù)源
TAG 鏡像的標(biāo)簽
IMAGE ID 鏡像的id
CREATED 鏡像的創(chuàng)建時(shí)間
SIZE 鏡像的大小
可選項(xiàng)
-a,--all 列出所有對(duì)象
-q,--quiet 只顯示鏡像的id
常用命令
搜索鏡像
docker search 鏡像名
可選項(xiàng):-- filter=stars=3000 篩選星級(jí)大于等于3千的
下載鏡像
docker pull 鏡像名:版本
eg:docker pull mysql:5.7
不輸入版本默認(rèn)最新。
刪除鏡像
docker rmi 容器id
-f 強(qiáng)制,多個(gè)時(shí)空格間隔
批量刪除:docker rmi docker images -aq
保存導(dǎo)出鏡像
docker save mysql > /tmp/test/mysql.tgz
先在容器內(nèi)安裝我們需要的軟件后,提交該鏡像,導(dǎo)出鏡像為壓縮文件,可以發(fā)給別人使用了
保存以下鏡像到指定文件夾
查看鏡像詳細(xì)信息
docker info
docker image inspect 鏡像id
docker image inspect 鏡像id前幾位
修改鏡像名稱
docker tag 鏡像id 名稱
容器命令
新建容器并啟動(dòng),不存在回去下載
docker run [可選參數(shù)] image
--name = "Name" 容器名稱 mysql1,mysql2
-d 后臺(tái)運(yùn)行
-it 使用交互方式運(yùn)行,進(jìn)入容器查看內(nèi)容
-p 指定端口映射,主機(jī)端口:容器端口 -p 80:80
退出容器
exit #退出并停止
Ctrl + P + Q #不停止退出
列出所有容器
docker ps [可選參數(shù)]
-a 列出當(dāng)前正在運(yùn)行的容器+帶出歷史運(yùn)行過的容器
-n=?顯示最近創(chuàng)建的容器
刪除容器
docker rm 容器id
docker rm -f $(docker ps -aq) # 刪除所有的容器
docker ps -a -q|xargs docker rm # 刪除所有的容器
-f 強(qiáng)制刪除
啟動(dòng)和停止
docker start 容器id 啟動(dòng)
docker restart 容器id 重啟
docker stop 容器id 停止
docker kill 容器id 強(qiáng)制停止
查看容器端口
docker port 容器名稱
提交容器
docker commit 容器id 新的鏡像名稱
先提交保存新的鏡像然后通過docker save 去導(dǎo)出到文件夾
日志
docker logs -f-t --tail 容器id
查看鏡像的元數(shù)據(jù)
docker inspect 容器id
查看容器詳細(xì)信息
docker container inspect 容器id
進(jìn)入當(dāng)前正在運(yùn)行容器
方式一:docker exec -it 容器id bashShe11 進(jìn)入容器后開啟一個(gè)新的終端,可以在里面操作(常用)
方式二: docker attach 容器id 進(jìn)入容器正在執(zhí)行的終端,不會(huì)啟動(dòng)新的進(jìn)程!
進(jìn)入容器,修改一些配置
多容器通信
要想多容器之間互通,從項(xiàng)目容器訪問 Redis 容器,需要把他們放到同個(gè)網(wǎng)絡(luò)中。通過創(chuàng)建虛擬網(wǎng)絡(luò)并在運(yùn)行時(shí)把他們放到一個(gè)虛擬網(wǎng)絡(luò)下即可。
創(chuàng)建一個(gè)名為test的網(wǎng)絡(luò):
docker network create test
運(yùn)行 Redis 在 test網(wǎng)絡(luò)中,別名redis
docker run -d --name redis --network test-net --network-alias redis redis:5.0
docker network ls 查看網(wǎng)絡(luò)列表
Dockerfile
自定義鏡像就需要?jiǎng)?chuàng)建一個(gè)Dockerfile文件定義鏡像,然后執(zhí)行構(gòu)建命令。
from: 指定當(dāng)前自定義鏡像依賴的環(huán)境,指定基礎(chǔ)鏡像
copy: copy指令從宿主機(jī)復(fù)制文件/目錄到新的一層鏡像內(nèi).COPY指令能夠保留源文件的元數(shù)據(jù),如權(quán)限,訪問時(shí)間等等
add: 復(fù)制文件會(huì)自動(dòng)解壓,復(fù)制主機(jī)文件到容器內(nèi)
workdir: 聲明鏡像的默認(rèn)工作目錄
run: 執(zhí)行的命令,可以編寫多個(gè),也就是你想它干啥
cmd: 需要執(zhí)行的命令(在workdir下執(zhí)行的,cmd可以寫多個(gè),只以最后一個(gè)為準(zhǔn))
volume:設(shè)置卷,掛載主機(jī)目錄,將容器產(chǎn)生的數(shù)據(jù)存到主機(jī)上
ENV:設(shè)置環(huán)境變量
expose:指定容器運(yùn)行時(shí)對(duì)外提供的端口服務(wù)
CMD:在指定了entrypoint指令后,用CMD指定具體的參數(shù)
docker不是虛擬機(jī),容器就是一個(gè)進(jìn)程,既然是進(jìn)程,那么程序在啟動(dòng)的時(shí)候需要指定些運(yùn)行參數(shù),這就是CMD指令作用
例如centos鏡像默認(rèn)的CMD是/bin/bash,直接docker run-it centos會(huì)直接進(jìn)入bash解釋器也可以啟動(dòng)容器時(shí)候,指定參數(shù),docker run it centos cat /etc/os-releasea
CMD運(yùn)行shell命令,也會(huì)被轉(zhuǎn)化為shell形式
ENV:
例如:
在dockerfile中
ENV NAME="張三"
ENV age="18"
# 后續(xù)的操作通過$NAME就可以訪問張三
例如:運(yùn)行個(gè)jar包
# 使用官方的OpenJDK鏡像作為基礎(chǔ)鏡像
FROM openjdk:8-jdk-alpine
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制構(gòu)建好的JAR包到容器中
COPY target/app-1.0-SNAPSHOT.jar /app/app.jar
# 暴露端口
EXPOSE 8080
# 運(yùn)行應(yīng)用
CMD ["java", "-jar", "app.jar"]
編寫完Dockerfile后需要通過命令將其制作為鏡像,并且要在Dockerfile的當(dāng)前目錄下,之后即可在鏡像中查看到指定的鏡像信息,注意最后的 .
docker build -t 鏡像名稱[:tag] .
1、構(gòu)建:docker build -t my-java-app
2、運(yùn)行容器:docker run -p 8080:8080 -d my-java-app
Docker-Compose
使用 docker-compose 可以把項(xiàng)目的多個(gè)服務(wù)集合到一起,一鍵運(yùn)行。
linux版本安裝
1、校驗(yàn)是否已經(jīng)安裝
docker compose version
2、沒有安裝的話,
sudo yum update
sudo yum install docker-compose-plugin
要把項(xiàng)目依賴的多個(gè)服務(wù)集合到一起,我們需要編寫一個(gè)docker-compose.yml文件,描述依賴哪些服務(wù)

浙公網(wǎng)安備 33010602011771號(hào)