一橘忱、概述
1.1. 學(xué)習(xí)路徑
- Docker概述
- Docker安裝
- Docker命令
- 鏡像命令
- 容器命令
- 操作命令
- ...
- Docker鏡像
- 容器數(shù)據(jù)卷
- DockerFile
- Docker網(wǎng)絡(luò)原理
- IDEA整合Docker
- Docker Compose
- Docker Swarm
- CI\CD Jenkins
1.2. Docker核心
Docker的核心思想:打包裝箱择示,每個(gè)箱子都是互相隔離的。
Docker容器技術(shù):是一種虛擬化技術(shù)盯仪。
Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的 Linux或Windows 機(jī)器上匿醒,也可以實(shí)現(xiàn)虛擬化睡榆。容器是完全使用沙箱機(jī)制萍肆,相互之間不會有任何接口。
沙箱:Sandboxie(又叫沙箱胀屿、沙盤)即是一個(gè)虛擬系統(tǒng)程序塘揣,允許你在沙盤環(huán)境中運(yùn)行瀏覽器或其他程序,因此運(yùn)行所產(chǎn)生的變化可以隨后刪除宿崭。它創(chuàng)造了一個(gè)類似沙盒的獨(dú)立作業(yè)環(huán)境亲铡,在其內(nèi)部運(yùn)行的程序并不能對硬盤產(chǎn)生永久性的影響。 在網(wǎng)絡(luò)安全中葡兑,沙箱指在隔離環(huán)境中奖蔓,用以測試不受信任的文件或應(yīng)用程序等行為的工具。
Docker是一個(gè)Client-Server結(jié)構(gòu)的系統(tǒng)讹堤,Docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上吆鹤,通過Socket來連接。
Docker的服務(wù)端接受到Docker客戶端的指令蜕劝,就會執(zhí)行這個(gè)命令檀头。
Docker比VM快的原因:
- Docker有著比虛擬機(jī)更少的抽象層
- Docker利用的是宿主機(jī)的內(nèi)核,VM需要的是Guest OS岖沛。
- 新建一個(gè)容器的時(shí)候暑始,Docker不需要像虛擬機(jī)一樣重新加載一個(gè)虛擬機(jī)內(nèi)核,避免引導(dǎo)婴削。虛擬機(jī)需要加載Guest OS廊镜,這個(gè)過程是分鐘級別的,非常慢唉俗,而Docker是利用宿主機(jī)的操作系統(tǒng)嗤朴,省略了這個(gè)復(fù)雜的過程华嘹。
- <a target="_blank"><img src="https://i.loli.net/2020/11/02/O1wbXF5ahPQDpgW.png" ></a>
使用Docker的流程:
java——jar(環(huán)境)——打包項(xiàng)目帶上環(huán)境(鏡像)——(Docker倉庫:商店)——下載發(fā)布的鏡像——直接運(yùn)行。
Docker相關(guān)網(wǎng)站:
Docker官網(wǎng):https://www.docker.com/
Docker倉庫:https://hub.docker.com/
Docker相關(guān)名詞解釋:
Docker鏡像:好比是一個(gè)模板桩皿,可以通過這個(gè)模板來創(chuàng)建容器服務(wù)耐朴。
Docker容器:Docker利用容器技術(shù),能夠運(yùn)行一個(gè)或者一組應(yīng)用吱雏,容器通過鏡像來創(chuàng)建敦姻。
Docker倉庫:存放鏡像的地方。倉庫分為共有倉庫和私有倉庫歧杏。
二镰惦、Docker安裝
安裝在了阿里云服務(wù)器上,所以服務(wù)器的相關(guān)資源要準(zhǔn)備好犬绒。
官方安裝說明文檔:https://docs.docker.com/engine/install/centos/
要安裝Docker需要CentOS 7:
To install Docker Engine, you need a maintained version of CentOS 7. Archived versions aren’t supported or tested.
查看系統(tǒng)內(nèi)核:
[root@izbp1h1sg6pkdch578k3w2z ~]# uname -r
3.10.0-514.26.2.el7.x86_64
系統(tǒng)版本:
[root@izbp1h1sg6pkdch578k3w2z ~]# uname -r
3.10.0-514.26.2.el7.x86_64
[root@izbp1h1sg6pkdch578k3w2z ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
在安裝新版本前旺入,要卸載老的版本:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
執(zhí)行結(jié)果:
[root@izbp1h1sg6pkdch578k3w2z ~]# sudo yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal
安裝需要的包:
sudo yum install -y yum-utils
設(shè)置鏡像的倉庫:
# 這個(gè)地址是官方文檔給的,默認(rèn)的鏡像是國外的凯力,會非常慢
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 這個(gè)是國內(nèi)阿里云的茵瘾,比較快
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum軟件包索引:
yum makecache fast
安裝Docker引擎:
sudo yum install docker-ce docker-ce-cli containerd.io
這里docker-ce是社區(qū)版的,docker-ee是企業(yè)版的沮协。
啟動Docker:
systemctl start docker
判斷Docker是否成功安裝:
docker version
運(yùn)行hello-world:
docker run hello-world
說明:
[root@izbp1h1sg6pkdch578k3w2z ~]# docker run hello-world
# 本地沒有找到hello-world鏡像
Unable to find image 'hello-world:latest' locally
# 遠(yuǎn)程拉取鏡像(pull)龄捡,拉去官方library下的hello-world
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
# 簽名信息,代表拉取OK
Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest
# 彈出這句話說明安裝成功
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
查看下載的hello-world鏡像:
docker images
卸載Docker:
# 卸載依賴
sudo yum remove docker-ce docker-ce-cli containerd.io
# 刪除目錄
sudo rm -rf /var/lib/docker
Docker的默認(rèn)工作路徑:/var/lib/docker
阿里云鏡像加速:
登錄阿里云服務(wù)器
-
打開容器鏡像服務(wù)
- image
-
打開鏡像加速器
- image
-
配置
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://muvits2o.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
- image
三慷暂、Docker的常用命令
官方命令文檔:https://docs.docker.com/reference/
3.1 幫助命令
# 顯示Docker的版本信息
docker version
# 顯示Docker的系統(tǒng)信息聘殖,包括鏡像和容器的數(shù)量
docker info
# 幫助命令
docker 命令 --help
3.2. 鏡像命令
docker images
- 查看所有本地主機(jī)上的鏡像
# 查看所有本地主機(jī)上的鏡像
docker images
[root@izbp1h1sg6pkdch578k3w2z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB
# 解釋
REPOSITORY 鏡像的倉庫源
TAG 鏡像的標(biāo)簽
IMAGE ID 鏡像的ID
CREATED 鏡像的創(chuàng)建時(shí)間
SIZE 鏡像的大小
# 可選項(xiàng)
--all , -a # 列出所有的鏡像
--digests Show digests
--filter , -f Filter output based on conditions provided
--format Pretty-print images using a Go template
--no-trunc Don’t truncate output
--quiet , -q # 只顯示鏡像的ID
docker search
- 搜索鏡像
這里搜索的mysql和在docker hub網(wǎng)頁上搜索mysql的結(jié)果差不多:
可選項(xiàng):
docker search -- help
[root@izbp1h1sg6pkdch578k3w2z ~]# docker search --help
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter # 過濾:Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
docker pull
- 下載鏡像
[root@izbp1h1sg6pkdch578k3w2z ~]# docker pull mysql
Using default tag: latest # tag如果為空,默認(rèn)下載的是最新版本的
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete # 分層下載行瑞,docker image的核心:聯(lián)合文件系統(tǒng)
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 簽名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真實(shí)地址
也就是說奸腺,以下兩個(gè)命令是等價(jià)的:
docker pull mysql
docker pull docker.io/library/mysql:latest
指定版本下載:
[root@izbp1h1sg6pkdch578k3w2z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
bb79b6b2107f: Already exists # 已經(jīng)下載過的就不重復(fù)下載了
49e22f6fb9f7: Already exists
842b1255668c: Already exists
9f48d1f43000: Already exists
c693f0615bce: Already exists
8a621b9dbed2: Already exists
0807d32aef13: Already exists
f15d42f48bd9: Pull complete
098ceecc0c8d: Pull complete
b6fead9737bc: Pull complete
351d223d3d76: Pull complete
Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
查看下載的鏡像:
docker rmi
- 刪除鏡像
刪除可以指定鏡像名稱、鏡像ID刪除:
# 刪除指定鏡像
docker rmi -f 要?jiǎng)h除的鏡像ID
# 刪除多個(gè)鏡像
docker rmi -f 要?jiǎng)h除的鏡像ID1 要?jiǎng)h除的鏡像ID2 要?jiǎng)h除的鏡像ID3
# 刪除全部鏡像
docker rmi -f $(docker images -aq)
刪除指定鏡像:
再查看鏡像血久,5.7版本的就被刪掉了:
刪除所有鏡像:
再查看鏡像:
3.3. 容器命令
- 有了鏡像才可以創(chuàng)建容器突照,所以下載一個(gè)CentOS鏡像來測試學(xué)習(xí):
docker pull centos
[root@izbp1h1sg6pkdch578k3w2z ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@izbp1h1sg6pkdch578k3w2z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 2 months ago 215MB
docker run
- 啟動并運(yùn)行容器
[root@izbp1h1sg6pkdch578k3w2z ~]# docker run -it centos /bin/bash
# -it:進(jìn)入容器,交互運(yùn)行
# 敲完命令后root旁邊的名稱變了
[root@313f004887e2 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# ls用來查看容器內(nèi)的CentOS氧吐,這是一個(gè)基礎(chǔ)版本讹蘑,很多命令都是不完善的
# 后臺啟動容器
docker run -d 鏡像名
# 使用這個(gè)命令有一個(gè)問題,就是運(yùn)行完這個(gè)命令筑舅,再使用docker ps查看當(dāng)前啟動的容器座慰,發(fā)現(xiàn)這個(gè)容器沒有在啟動。
# 這是因?yàn)閐ocker容器使用后臺運(yùn)行翠拣,就必須要有一個(gè)前臺進(jìn)程版仔,docker發(fā)現(xiàn)沒有應(yīng)用,就會自動停止。
退出:
- 容器停止蛮粮,從容器中退回到主機(jī):
[root@313f004887e2 /]# exit
exit
[root@izbp1h1sg6pkdch578k3w2z ~]#
- 容器不停止益缎,退出:
- Ctrl+P+Q
docker ps
- 查看正在運(yùn)行的容器
# 查看正在運(yùn)行的容器
[root@izbp1h1sg6pkdch578k3w2z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@izbp1h1sg6pkdch578k3w2z ~]#
# 查看運(yùn)行過的容器
[root@izbp1h1sg6pkdch578k3w2z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
313f004887e2 centos "/bin/bash" 5 minutes ago Exited (0) 2 minutes ago lucid_euler
00a27b2c1031 bf756fb1ae65 "/hello" 5 hours ago Exited (0) 5 hours ago gracious_zhukovsky
[root@izbp1h1sg6pkdch578k3w2z ~]#
# 可選參數(shù)
docker ps # 當(dāng)前正在運(yùn)行的容器
docker ps -a # 列出當(dāng)前正在運(yùn)行的容器+歷史運(yùn)行過的容器
docker ps -n=? # 顯示最近創(chuàng)建過的?個(gè)容器
docker ps -q # 只顯示容器的編號
docker rm
- 刪除容器
# 刪除指定容器然想,不能刪除正在運(yùn)行的容器莺奔,如果要強(qiáng)制刪除,使用rm -f
docker rm 容器ID
# 刪除所有的容器
docker rm -f $(docker ps -aq)
# 使用管道刪除所有的容器
docker ps -a|xargs docker rm
啟動和停止容器:
# 啟動容器
docker start 容器ID
# 重啟容器
docker reatrt 容器ID
# 停止當(dāng)前運(yùn)行的容器
docker stop 容器ID
# 強(qiáng)制停止當(dāng)前容器
docker kill 容器ID
3.4. 常見其他命令
查看日志:
docker logs -tf --tail 10 容器名
# 10是參數(shù)又沾,顯示最近10條日志弊仪,如果容器還在運(yùn)行,那么會持續(xù)打印
查看容器中進(jìn)程信息:
docker top 容器ID
[root@izbp1h1sg6pkdch578k3w2z ~]# docker top 9252b12a6602
UID PID PPID C STIME TTY TIME CMD
root 6411 6379 0 16:43 ? 00:00:00 /bin/bash
[root@izbp1h1sg6pkdch578k3w2z ~]#
查看鏡像的元數(shù)據(jù):
docker inspect 容器ID
[root@izbp1h1sg6pkdch578k3w2z ~]# docker inspect 9252b12a6602
[
{
"Id": "9252b12a6602078e3ff84d1cef8b45ac4215e7c76cb3d28191b82e4ae1578f97",
"Created": "2020-11-02T08:43:43.721119773Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 6411,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-11-02T08:43:44.090485585Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/9252b12a6602078e3ff84d1cef8b45ac4215e7c76cb3d28191b82e4ae1578f97/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/9252b12a6602078e3ff84d1cef8b45ac4215e7c76cb3d28191b82e4ae1578f97/hostname",
"HostsPath": "/var/lib/docker/containers/9252b12a6602078e3ff84d1cef8b45ac4215e7c76cb3d28191b82e4ae1578f97/hosts",
"LogPath": "/var/lib/docker/containers/9252b12a6602078e3ff84d1cef8b45ac4215e7c76cb3d28191b82e4ae1578f97/9252b12a6602078e3ff84d1cef8b45ac4215e7c76cb3d28191b82e4ae1578f97-json.log",
"Name": "/strange_bose",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/ded86c07f57a2fbef466eaa0bb93eaa829d84477fd1c59b672b81d351738581a-init/diff:/var/lib/docker/overlay2/6a46a96a239b06d0b6380fb7518c179f7bad2c2c65885eaa86dd7373d66b3e80/diff",
"MergedDir": "/var/lib/docker/overlay2/ded86c07f57a2fbef466eaa0bb93eaa829d84477fd1c59b672b81d351738581a/merged",
"UpperDir": "/var/lib/docker/overlay2/ded86c07f57a2fbef466eaa0bb93eaa829d84477fd1c59b672b81d351738581a/diff",
"WorkDir": "/var/lib/docker/overlay2/ded86c07f57a2fbef466eaa0bb93eaa829d84477fd1c59b672b81d351738581a/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "9252b12a6602",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "6e5aaf69cc376ab504a4a467affff18a5b9a523749193f81fba57b54cf959c6e",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/6e5aaf69cc37",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "1d425e094d0342b53c951454b74f4625bb5c215e71e4071d6bfe55cdf15f0d35",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "31fb0281bc366eb473643efd1e191636af07f9244742e6942a7818c8b6761a50",
"EndpointID": "1d425e094d0342b53c951454b74f4625bb5c215e71e4071d6bfe55cdf15f0d35",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
[root@izbp1h1sg6pkdch578k3w2z ~]#
進(jìn)入當(dāng)前正在運(yùn)行的容器:
# 容器通常都是使用后臺方式運(yùn)行的杖刷,需要進(jìn)入容器修改一些配置
# 方式一
容器ID /bin/bash
[root@izbp1h1sg6pkdch578k3w2z ~]# docker exec -it 9252b12a6602 /bin/bash
[root@9252b12a6602 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@9252b12a6602 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:43 pts/0 00:00:00 /bin/bash
root 14 0 0 08:50 pts/1 00:00:00 /bin/bash
root 28 14 0 08:50 pts/1 00:00:00 ps -ef
# 方式二
docker attach 容器id
# docker exec # 進(jìn)入容器后開啟一個(gè)新的終端,可以在里面操作(常用)
# docker attach # 進(jìn)入容器正在執(zhí)行的終端驳癌,不會啟動新的
從容器內(nèi)拷貝文件到主機(jī)上:
docker cp 容器ID:容器內(nèi)路徑 目的主機(jī)路徑
# 過程:進(jìn)入docker容器內(nèi)滑燃,在容器內(nèi)新建一個(gè)文件,將這個(gè)文件拷貝到主機(jī)上
# 當(dāng)前的拷貝是一個(gè)手動的過程颓鲜,之后可以使用 -v 卷的技術(shù)表窘,可以實(shí)現(xiàn)自動同步
3.5. 命令小結(jié)
練習(xí)1:部署Nginx
-
搜索Nginx
- image
-
下載鏡像
- image
-
查看一下當(dāng)前的鏡像
- image
-
啟動
docker run -d --name nginx01 -p 3344:80 nginx # -d 代表后臺運(yùn)行 # --name 給容器命名 # -p 暴露端口 格式:【-p 宿主機(jī)端口:容器端口】
- image
-
查看容器
- image
-
本機(jī)自測
- image
在防火墻都關(guān)閉的情況下,在公網(wǎng)可以用云服務(wù)器的ip:3344來訪問Nginx甜滨。
練習(xí)2:裝一個(gè)Tomcat
# 官方提供的命令
docker run -it --rm tomcat:9.0
# 帶--rm命令選項(xiàng)乐严,這種方法一般用作測試,等價(jià)于在容器退出后衣摩,執(zhí)行docker rm -v昂验,也就是退出后立即刪除該容器使用
# 使用這個(gè)命令就不用先pull了
- 正常步驟下載tomcat
- image
- 啟動tomcat
- image
- 使用公網(wǎng)訪問的時(shí)候會有404問題,但是使用官方提供的命令艾扮,測試是沒問題的既琴,這個(gè)是因?yàn)榘⒗镌歧R像的原因,阿里云默認(rèn)是最小的鏡像泡嘴,所有的不必要的都剔除了甫恩,所以在啟動這個(gè)容器的時(shí)候,里面的linux命令是缺少的酌予,webapps也是空目錄磺箕,所以訪問的時(shí)候就是404。
- 解決辦法:可以把webaaps.dist目錄下的文件拷貝到webapps下抛虫,或者把webapps.dist改名為webapps松靡。
3.6. Docker可視化
portainer:
Docker的圖形化界面管理工具,提供一個(gè)后臺面板供操作莱褒。
-
下載啟動
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
公網(wǎng)訪問方式:云服務(wù)器的ip+端口
內(nèi)網(wǎng)訪問方式:curl localhost:端口
如果防火墻關(guān)閉击困,無法訪問,配置一下開放端口:https://developer.aliyun.com/article/87135
-
公網(wǎng)訪問
- image
- 在這個(gè)界面輸入密碼,創(chuàng)建用戶阅茶。
- 選擇local的這個(gè)
- image
- 可以看到docker的一些信息
- image