Docker的安裝及基礎(chǔ)命令

一橘忱、概述

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快的原因:

  1. Docker有著比虛擬機(jī)更少的抽象層
  2. 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/

官方文檔:https://docs.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
image

設(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
image

更新yum軟件包索引:

yum makecache fast
image

安裝Docker引擎:

sudo yum install docker-ce docker-ce-cli containerd.io

這里docker-ce是社區(qū)版的,docker-ee是企業(yè)版的沮协。

image

啟動Docker:

systemctl start docker
image

判斷Docker是否成功安裝:

docker version
image

運(yùn)行hello-world:

docker run hello-world
image

說明:

[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
image

卸載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

  • 搜索鏡像
image

這里搜索的mysql和在docker hub網(wǎng)頁上搜索mysql的結(jié)果差不多:

image

可選項(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

查看下載的鏡像:

image

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)

刪除指定鏡像:

image

再查看鏡像血久,5.7版本的就被刪掉了:

image

刪除所有鏡像:

image-20201102152121144

再查看鏡像:

image

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é)

image

練習(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)閉防火墻

  • 如果防火墻關(guān)閉击困,無法訪問,配置一下開放端口:https://developer.aliyun.com/article/87135

  • 公網(wǎng)訪問

    • image
    • 在這個(gè)界面輸入密碼,創(chuàng)建用戶阅茶。
    • 選擇local的這個(gè)
    • image
    • 可以看到docker的一些信息
    • image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛛枚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脸哀,更是在濱河造成了極大的恐慌蹦浦,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撞蜂,死亡現(xiàn)場離奇詭異盲镶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝌诡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門溉贿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浦旱,你說我怎么就攤上這事宇色。” “怎么了颁湖?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵宣蠕,是天一觀的道長。 經(jīng)常有香客問我甥捺,道長抢蚀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任镰禾,我火速辦了婚禮皿曲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羡微。我一直安慰自己谷饿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布妈倔。 她就那樣靜靜地躺著博投,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盯蝴。 梳的紋絲不亂的頭發(fā)上毅哗,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音捧挺,去河邊找鬼虑绵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闽烙,可吹牛的內(nèi)容都是我干的翅睛。 我是一名探鬼主播声搁,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捕发!你這毒婦竟也來了疏旨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤扎酷,失蹤者是張志新(化名)和其女友劉穎檐涝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體法挨,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谁榜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凡纳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窃植。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荐糜,靈堂內(nèi)的尸體忽然破棺而出撕瞧,到底是詐尸還是另有隱情,我是刑警寧澤狞尔,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站巩掺,受9級特大地震影響偏序,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胖替,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一研儒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧独令,春花似錦端朵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至招狸,卻和暖如春敬拓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裙戏。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工乘凸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人累榜。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓营勤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子葛作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350