虚拟机CENTOS7环境安装

网卡1:使用NAT模式,保证虚拟机上网,但是不能和宿主机通信

启用网卡2:使用Host-only模式,在虚拟机全局设置菜单中开启网卡2的DHCP功能!

如CENTOS7中网卡2的配置文件不存在,则需要输入如下命令创建:

[root@localhost ~]# nmcli con add con-name enp0s8 type ethernet ifname enp0s8

Docker安装与卸载

#1、查看系统版本
[root@localhost ~]# uname -r
3.10.0-1160.59.1.el7.x86_64

[root@localhost ~]# 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"

#2、卸载旧版本
sudo yum remove docker \
                 docker-client \
                 docker-client-latest \
                 docker-common \
                 docker-latest \
                 docker-latest-logrotate \
                 docker-logrotate \
                 docker-engine
#3、需要的安装包
sudo yum install -y yum-utils

#4、设置镜像仓库 官方地址太慢 改为阿里云地址
sudo yum-config-manager \
   --add-repo \
   https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
   
#5、更新yum软件包索引
sudo yum makecache fast

#6、安装docker
sudo yum install docker-ce docker-ce-cli containerd.io

#7、开启docker服务
[root@localhost ~]# systemctl start docker

#8、查看docker版本号,说明docker已启动成功
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version:           20.10.12
API version:       1.41
Go version:        go1.16.12
Git commit:        e91ed57
Built:             Mon Dec 13 11:45:41 2021
OS/Arch:           linux/amd64
Context:           default
Experimental:      true

Server: Docker Engine - Community
Engine:
 Version:          20.10.12
 API version:      1.41 (minimum version 1.12)
 Go version:       go1.16.12
 Git commit:       459d0df
 Built:            Mon Dec 13 11:44:05 2021
 OS/Arch:          linux/amd64
 Experimental:     false
containerd:
 Version:          1.4.12
 GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
 Version:          1.0.2
 GitCommit:        v1.0.2-0-g52b36a2
docker-init:
 Version:          0.19.0
 GitCommit:        de40ad0

#9、卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd


#查看已经安装的镜像
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

阿里云镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6xvzrvh8.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker 常用命令

帮助命令

docker version        #显示docker的版本信息    
docker info            #显示docker的系统信息和镜像容器信息
docker 命令 --help

帮助文档的地址:docker images | Docker Documentation

镜像命令

docker images 查看所有本地主机的镜像

[root@localhost /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         latest    3218b38490ce   2 months ago   516MB
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

#解释
REPOSITORY    镜像的仓库源
TAG            镜像的标签 
IMAGE ID    镜像的ID
CREATED        镜像的创建时间
SIZE        镜像的大小

#可选项
-a
-q

docker search 搜索镜像

[root@localhost /]# docker search mysql

docker pull 下载镜像

[root@localhost /]# docker pull mysql:5.7

docker rmi 删除镜像

[root@localhost /]# docker rmi -f 镜像ID        #删除指定的镜像
[root@localhost /]# docker rmi -f 镜像ID 镜像ID 镜像ID          #删除多个镜像
[root@localhost /]# docker rmi -f $(docker images -aq)        #删除全部镜像                

docker run 启动镜像并运行

[root@localhost /]# docker run 镜像ID            #启动镜像并生成容器!!!

容器命令

有了镜像才能创建容器

docker pull centos

新建容器并启动

docker run [可选参数] image

#参数说明
--name="Name" 容器名字 用来区分名字
-d              后台方式运行
-it           使用交互方式运行
-p            指定容器的端口 -p  8080:8080
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口(常用)
    -p 容器端口
    容器端口
-p              随机指定端口

#测试,启动并进入容器
[root@localhost /]# docker run -it centos /bin/bash
[root@ab22e5566dde /]# ls

#从容器中退回主机
[root@e739784584ac /]# exit
exit
[root@localhost /]# 

列出所有运行中的容器

# docker ps 命令
-a
-a=n?
-q

[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                       PORTS     NAMES
e739784584ac   centos         "/bin/bash"   2 minutes ago   Exited (0) 2 minutes ago               funny_margulis
ab22e5566dde   centos         "/bin/bash"   6 minutes ago   Exited (130) 4 minutes ago             optimistic_wescoff
ce708150e933   feb5d9fea6a5   "/hello"      45 hours ago    Exited (0) 45 hours ago                compassionate_haslett

退出容器

exit        #直接容器停止并退出
ctrl+P+Q      #容器不停止退出

删除容器

docker rm 容器id    #删除指定的容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq)     #强制删除所有的容器
docker ps -a -q|xargs docker rm    #删除所有的容器 管道

启动和停止容器

docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

其他命令

后台启动容器

docker run -d 镜像名
[root@localhost /]# docker run -d centos

查看日志

docker logs -f -t --tail 容器id
#启动容器 并不运行shell脚本(循环)
[root@localhost /]# docker run -d centos /bin/sh -c "while true;do echo helloworld;sleep 1;done"

显示容器进程

[root@localhost /]# docker top 51cce913755e
UID                 PID                 PPID                C                   STIME               TTY                 TIME     
root                5156                5138                0                   15:28               ?                   00:00:00 
root                5198                5156                0                   15:28               ?                   00:00:00 

查看镜像的元数据

[root@localhost /]# docker inspect 51cce913755e
[
    {
        "Id": "51cce913755e63f4a4f9aadd17d96a236eff7aa854a5c12f2b7a1d473be77e8f",
        "Created": "2022-02-28T07:23:45.644839798Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "COUNTER=1;while ((COUNTER<50));do echo helloworld;((COUNTER++));sleep 1;done"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-02-28T07:28:15.135342013Z",
            "FinishedAt": "2022-02-28T07:29:04.237722473Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/51cce913755e63f4a4f9aadd17d96a236eff7aa854a5c12f2b7a1d473be77e8f/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/51cce913755e63f4a4f9aadd17d96a236eff7aa854a5c12f2b7a1d473be77e8f/hostname",
        "HostsPath": "/var/lib/docker/containers/51cce913755e63f4a4f9aadd17d96a236eff7aa854a5c12f2b7a1d473be77e8f/hosts",
        "LogPath": "/var/lib/docker/containers/51cce913755e63f4a4f9aadd17d96a236eff7aa854a5c12f2b7a1d473be77e8f/51cce913755e63f4a4f9aadd17d96a236eff7aa854a5c12f2b7a1d473be77e8f-json.log",
        "Name": "/vigilant_hoover",
        "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,
            "CgroupnsMode": "host",
            "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/84c7496e9d721609c5e127b3b5324776ac4bd5ce289a2fd40fdba3cab37aaa0d-init/diff:/var/lib/docker/overlay2/c7eab56756b400939e058357414e33f9d78a3e8d4c788c42c2b02fa2faa31166/diff",
                "MergedDir": "/var/lib/docker/overlay2/84c7496e9d721609c5e127b3b5324776ac4bd5ce289a2fd40fdba3cab37aaa0d/merged",
                "UpperDir": "/var/lib/docker/overlay2/84c7496e9d721609c5e127b3b5324776ac4bd5ce289a2fd40fdba3cab37aaa0d/diff",
                "WorkDir": "/var/lib/docker/overlay2/84c7496e9d721609c5e127b3b5324776ac4bd5ce289a2fd40fdba3cab37aaa0d/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "51cce913755e",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "COUNTER=1;while ((COUNTER<50));do echo helloworld;((COUNTER++));sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "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": "3a83b748670b8cc644f47a4838f16a93182fb14f520420c62d3d6219715e66e1",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/3a83b748670b",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "dd4e979df5eacedffd6e8c0bf1f4124f9919983c6defff38eda9e2a5596c77a4",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

#方式1 docker exec -it 容器id bashshell
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
4fad63960b42   centos    "/bin/sh -c 'while t…"   About a minute ago   Up About a minute             run
[root@localhost /]# docker exec -it 4fad63960b42 /bin/bash
[root@4fad63960b42 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 07:43 ?        00:00:00 /bin/sh -c while true;do echo helloworld;sleep 1;done
root       119     0  0 07:45 pts/0    00:00:00 /bin/bash
root       139     1  0 07:45 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root       140   119  0 07:45 pts/0    00:00:00 ps -ef

#方式2 docker attach 容器id

#docker exec      #进入容器后开启一个新的终端,可以在里面操作
#docker attach     #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

#docker cp 容器id:容器内文件路径 宿主机路径

练习

docker安装Nginx

#安装镜像
[root@localhost home]# docker search nginx
[root@localhost home]# docker pull nginx

#开启容器
[root@localhost home]# docker run -d --name nginx01 -p 3344:80 nginx
[root@localhost home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#进入容器
[root@localhost home]# docker exec -it nginx01 /bin/bash
root@7724c69af514:/# ls
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr
root@7724c69af514:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

docker安装Tomcat

docker部署es+kibana

Docker 镜像

镜像是什么

如何得到镜像:

  • 从远程仓库下载
  • 从其他地方拷贝
  • 自己制作

Docker镜像加载原理

分层结构

commit镜像

#1、启动一个默认的tomcat

#2、修改webapps目录

#3、使用commit命令提交为一个新的镜像
[root@localhost ~]# docker commit -a="totong" -m="add webapps" 9e562d4db967 tomcat02:1.0

容器数据卷

概念

docker的理念

将应用和环境打包成一个镜像

如果数据都在容器中,那么删除容器,数据就会丢失!

需求:数据可以存储在本地

容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地

将容器内的目录挂载到Linux上

容器间也可以数据共享

使用数据卷

#run centos后 挂载数据卷
# -v 宿主机目录:容器内目录
[root@localhost test]# docker run -it -v /home/test:/home centos /bin/bash

#关闭容器后

#修改宿主机上的文件

#启动容器后,文件也能够同步

具名挂载和匿名挂载

#docker volume 命令
#docker volume create #新建卷
#docker volume inspect 卷名称   #显示当前卷的信息
#docker volume ls #列出所有卷
#docker volume prune #移除所有未使用的本地卷
#dokcer volue rm #移除一个或者多个卷
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     8ec5070b6ffe99a10a580b80cd83204fac88dba6afc048664238d7eff6b24b3b

具名挂载
[root@localhost test]# docker run -d -P --name nginx01 -v /etc/nginx nginx

-v 容器内路径  #匿名挂载
-v 卷名:容器内路径  #具名挂载
-v /宿主机路径:容器内路径  #指定路径挂载

:ro  容器内只读,不能修改,只能通过外部修改
:rw     容器内可读写

简单构建一个DockerFile

数据卷容器

#实现在多个容器之间共享文件
# --volumes-from 容器名称

DockerFile

DockerFile概念

DockerFile指令

FROM
MAINTAINER
RUN
ADD
WORKDIR
VOLUME
EXPOSE
CMD
ENTRYPOINT
ONBUILD
COPY
ENV

实战测试

[root@localhost totong]# vi myDockerFile
CMD echo "----END----"
FROM centos
MAINTAINER RichardFei<259202003@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----END----"
CMD /bin/bash


docker build -f 文件名 -t repository:版本号 .

Docker网络

理解Docker0

原理:

1.每启动一个容器,docker就会给容器分配一个ip,只要安装了docker,就会有一个网卡docker0,桥接模式,使用的是evth-pair技术。

IP地址查看命令

ip addr
ifconfig
#重要!!
apt update

#安装PING工具命令
apt-get install inetutils-ping

#安装ip addr命令
apt install -y iproute2

#安装ifconfig命令
apt-get install -y net-tools

#安装VIM命令
apt-get install -y vim

#安装CURL命令
apt install -y curl

#查看docker网络配置
[root@localhost ~]# docker network
Usage:  docker network COMMAND
Manage networks
Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.

--link

#生成容器时将tomcat02 link到容器tomcat  
[root@localhost ~]# docker run -d -P --name tomcat02 --link tomcat tomcat02:3.0


[root@localhost ~]# docker exec -it tomcat02 cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      tomcat 7a0f267027a3
172.17.0.3      677e27cd5664

自定义网络

容器互联

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8314016388df   bridge    bridge    local
951cc7c83ddb   host      host      local
72065cf0f885   none      null      local

网络模式

bridge:桥接 docker (默认,自己创建也使用bridge)

none:不配置网络

host:和宿主机共享网络

container:容器网络连通

--net bridge 默认网络参数
[root@localhost ~]# docker run -d -P --name tomcat01 tomcat
[root@localhost ~]# docker run -d -P --name tomcat01 --net bridge tomcat

#docker0的特点,默认,域名不能访问,--link

网络连通

最后修改:2022 年 04 月 12 日
如果觉得我的文章对你有用,请随意赞赏