美文网首页
Docker(1)-Docker的安装-常用命令

Docker(1)-Docker的安装-常用命令

作者: 弹钢琴的崽崽 | 来源:发表于2020-06-24 23:40 被阅读0次

    Docker能干嘛

    之前的虚拟机技术

    虚拟机技术缺点:

    1. 资源占用十分多
    2. 冗余步骤多
    3. 启动很慢!

    容器化技术

    容器化技术不是模拟的一个完整的操作系统

    比较Docker和虚拟机技术的不同:

    • 传统虚拟机,虚拟出一个硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
    • 容器内的应用直接运行在 宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
    • 每个容器间是相互隔离,每个容器内都有一个属于自己的文件系统,互不影响。

    DevOps(开发、运维)

    应用更快速的交付和部署

    传统:一堆帮助文档,安装程序

    Docker:打包镜像发布测试,一键运行

    更便捷的升级和扩缩容

    使用了Docker之后,我们部署应用就和搭积木一样!

    项目打包为一个镜像,扩展服务器A!服务器B

    更简单的系统运维

    在容器化之后,我们的开发,测试环境都是高度一致的。

    更高效的计算资源利用:

    Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。

    Docker安装

    1. Docker的基本组成

    镜像(image):

    docker镜像就好比一个模版,可以通过这个模版来创建容器服务,tomcat镜像===》run ==》tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

    容器(container):

    Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。

    启动,停止,删除,基本命令!

    仓库( repository):

    仓库就是存放镜像的地方!

    仓库分为公有仓库和私有仓库!

    Docker Hub(默认是国外的)

    阿里云.....都有容器服务器(配置镜像加速!)

    2. 安装Docker

    环境准备

    1. 需要会一点点的Linux的基础
    2. CentOS 7
    3. 我们使用Xshell连接远程服务器进行操作

    环境查看

    # 系统内核是3.10以上的
    [root@iz2zeakqdima07k787wct3z /]# uname -r
    3.10.0-514.26.2.el7.x86_64
    
    # 系统版本
    [root@iz2zeakqdima07k787wct3z /]# 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"
    

    安装

    帮助文档:

    # 1. 卸载旧的版本
    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    # 2. 需要的安装包
    yum install -y yum-utils
    # 3. 设置镜像的仓库
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的
        
    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 更新yum软件包索引
    yum makecache fast
    # 4. 安装docker相关的 docker-ce社区 ee企业
    yum install docker-ce docker-ce-cli containerd.io
    # 5. 启动Docker
    systemctl start docker
    # 6. 使用docker version 是否安装成功
    
    # 7. hello-world
    docker run hello-world
    # 8. 查看一下下载的这个 hello-world镜像
    [root@iz2zeakqdima07k787wct3z /]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    

    了解:卸载Docker

    # 1. 卸载依赖
    yum remove docker-ce docker-ce-cli containerd.io
    # 2. 删除资源
    rm -rf /var/lib/docker
    # /var/lib/docker docker的默认工作路径
    

    3. 阿里云镜像加速

    1. 登陆阿里云,找到容器镜像服务

    2. 找到镜像加速器

    3. 配置使用

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

    4. 回顾HelloWorld流程

    5. 底层原理

    Docker是怎么工作的?

    Docker是一个Client - Server 结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!

    DockerServer接收到Docker-Client的指令,就会执行这个命令!

    Docker为什么比VM快?

    1. Docker有着比虚拟机更少的抽象层

    2. Docker利用的是宿主机的内核,VM需要的是Guest OS.

    所以说,新建一个容器的时候,Docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级的。

    Docker的常用命令

    1. 帮助命令

    docker version      # 显示Docker的版本信息
    docker info         # 显示Docker的系统信息,包括镜像和容器的数量
    docker 命令 --help    # 万能命令
    

    2. 镜像命令

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

    [root@iz2zeakqdima07k787wct3z /]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    # 解释
    REPOSITORY  镜像的仓库源
    TAG         镜像的标签
    IMAGE ID    镜像的ID
    CREATED     镜像的创建时间
    SIZE        镜像的大小
    # 可选项
      -a, --all             # 列出所有的镜像
      -q, --quiet           # 只显示镜像的ID
    

    docker search 搜索镜像

    [root@iz2zeakqdima07k787wct3z /]# docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   9666                [OK]                
    mariadb                           MariaDB is a community-developed fork of MyS…   3517                [OK]
    
    # 可选项,通过收藏来过滤
    --filter=STARS=3000     # 搜索出来的镜像就是STARS大于3000的
    
    [root@iz2zeakqdima07k787wct3z /]# docker search mysql --filter=STARS=3000
    NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql               MySQL is a widely used, open-source relation…   9666                [OK]                
    mariadb             MariaDB is a community-developed fork of MyS…   3517                [OK]                
    [root@iz2zeakqdima07k787wct3z /]# docker search mysql --filter=STARS=5000
    NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql               MySQL is a widely used, open-source relation…   9666                [OK]     
    

    docker pull 下载镜像

    # 下载镜像 docker pull 镜像名[:tag]
    [root@iz2zeakqdima07k787wct3z /]# docker pull mysql
    Using default tag: latest           # 如果不写tag,默认就是latest
    latest: Pulling from library/mysql
    8559a31e96f4: Pull complete         # 分层下载,docker images的核心 联合文件系统
    d51ce1c2e575: Pull complete 
    c2344adc4858: Pull complete 
    fcf3ceff18fc: Pull complete 
    16da0c38dc5b: Pull complete 
    b905d1797e97: Pull complete 
    4b50d1c6b05c: Pull complete 
    c75914a65ca2: Pull complete 
    1ae8042bdd09: Pull complete 
    453ac13c00a3: Pull complete 
    9e680cd72f08: Pull complete 
    a6b5dc864b6c: Pull complete 
    Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 # 签名
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest  # 真实地址
    # 等价于它
    [root@iz2zeakqdima07k787wct3z /]# docker pull mysql:5.7
    5.7: Pulling from library/mysql
    8559a31e96f4: Already exists 
    d51ce1c2e575: Already exists 
    c2344adc4858: Already exists 
    fcf3ceff18fc: Already exists 
    16da0c38dc5b: Already exists 
    b905d1797e97: Already exists 
    4b50d1c6b05c: Already exists 
    d85174a87144: Pull complete 
    a4ad33703fa8: Pull complete 
    f7a5433ce20d: Pull complete 
    3dcd2a278b4a: Pull complete 
    Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
    Status: Downloaded newer image for mysql:5.7
    docker.io/library/mysql:5.7
    
    

    docker rmi 删除镜像

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

    3. 容器命令

    说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

    docker pull centos
    

    新建容器并启动

    docker run [可选参数] image
    
    # 参数说明
    --name="Name"       容器名字 tomcat01 tomcat02,用来区分容器
    -d                  后台方式运行
    -it                 使用交互方式运行,进入容器查看内容
    -p                  指定容器的端口 -p 8080:8080
        -p ip:主机端口:容器端口
        -p 主机端口:容器端口(常用)
        -p 容器端口
        容器端口
    -P(大写)              随机指定端口
    
    # 测试,启动并进入容器
    [root@iz2zeakqdima07k787wct3z ~]# docker run -it centos /bin/bash
    [root@f2c30cb486b0 /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    # 从容器中退出主机
    [root@f2c30cb486b0 /]# exit
    exit
    [root@iz2zeakqdima07k787wct3z ~]# ls
    App  community.mv.db  community.trace.db  install.sh
    [root@iz2zeakqdima07k787wct3z ~]# cd /
    [root@iz2zeakqdima07k787wct3z /]# ls
    bin   dev  home  lib64       media  opt    proc  run   srv  tmp  var
    boot  etc  lib   lost+found  mnt    patch  root  sbin  sys  usr  www
    

    列出所有的运行的容器

    # docker ps 命令
        # 列出当前正在运行的容器
    -a  # 列出当前正在运行的容器+带出历时运行过的容器
    -n=?    # 显示最近创建的容器
    -q  # 只显示容器的编号
    [root@iz2zeakqdima07k787wct3z /]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@iz2zeakqdima07k787wct3z /]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
    f2c30cb486b0        centos              "/bin/bash"         4 minutes ago       Exited (0) About a minute ago                       angry_murdock
    52518c87115d        bf756fb1ae65        "/hello"            3 hours ago         Exited (0) 3 hours ago                              focused_ardinghelli
    [root@iz2zeakqdima07k787wct3z /]# 
    

    退出容器

    exit    # 直接容器停止并退出
    Ctrl + p + q    # 容器不停止退出
    

    删除容器

    docker rm 容器id          # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
    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        # 强制停止当前容器
    

    4. 常用的其它命令

    后台启动容器

    # 命令 docker run -d 镜像名!
    [root@iz2zeakqdima07k787wct3z /]# docker run -d centos
    
    # 问题docker ps. 发现centos停止了
    
    # 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
    # nginx, 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
    

    查看日志

    docker logs -tf --tail 容器,没有日志
    # 自己编写一段shell脚本
    [root@iz2zeakqdima07k787wct3z /]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
    
    [root@iz2zeakqdima07k787wct3z /]# docker ps
    CONTAINER ID        IMAGE
    dklfjsd90923        centos
    # 显示日志
    -tf     # 显示日志
    --tail number   #要显示日志参数
    [root@iz2zeakqdima07k787wct3z /]# docker logs -tf --tail 10 dklfjsd90923
    

    查看容器中的进程信息

    # 命令 docker top 容器id
    [root@iz2zeakqdima07k787wct3z /]# docker top 9961c3fb674e
    UID                 PID                 PPID                C                STIME               TTY             
    root                31578               31561               0                20:05               ?   
    
    

    查看镜像的元数据

    # 命令
    docker inspect 容器id
    # 测试
    [root@iz2zeakqdima07k787wct3z /]# docker inspect 9961c3fb674e
    [
        {
            "Id": "9961c3fb674ed7609751820b8176f57243e7c9659e1e3b9f12a000c67d91715b",
            "Created": "2020-06-24T12:05:59.557788047Z",
            "Path": "/bin/bash",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 31578,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2020-06-24T12:05:59.8444924Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f",
            "ResolvConfPath": "/var/lib/docker/containers/9961c3fb674ed7609751820b8176f57243e7c9659e1e3b9f12a000c67d91715b/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/9961c3fb674ed7609751820b8176f57243e7c9659e1e3b9f12a000c67d91715b/hostname",
            "HostsPath": "/var/lib/docker/containers/9961c3fb674ed7609751820b8176f57243e7c9659e1e3b9f12a000c67d91715b/hosts",
            "LogPath": "/var/lib/docker/containers/9961c3fb674ed7609751820b8176f57243e7c9659e1e3b9f12a000c67d91715b/9961c3fb674ed7609751820b8176f57243e7c9659e1e3b9f12a000c67d91715b-json.log",
            "Name": "/eloquent_pike",
            "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/c833e7d2ef07a84d9b7c730f4ea482ea25825018716e436b8a9f54f7a5e28fc0-init/diff:/var/lib/docker/overlay2/a5ec0aeff1ce1aabe815a53d3b3c9e21a54adc1834a55e331e53ebfde0900707/diff",
                    "MergedDir": "/var/lib/docker/overlay2/c833e7d2ef07a84d9b7c730f4ea482ea25825018716e436b8a9f54f7a5e28fc0/merged",
                    "UpperDir": "/var/lib/docker/overlay2/c833e7d2ef07a84d9b7c730f4ea482ea25825018716e436b8a9f54f7a5e28fc0/diff",
                    "WorkDir": "/var/lib/docker/overlay2/c833e7d2ef07a84d9b7c730f4ea482ea25825018716e436b8a9f54f7a5e28fc0/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],
            "Config": {
                "Hostname": "9961c3fb674e",
                "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": "20200611",
                    "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": "a454e0ed11f4bc44551bde7ecba049b6d13bb4eac85c997ca2ae68c11c611a0b",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "/var/run/docker/netns/a454e0ed11f4",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "91c0563ab8007aaeb5f26b6affbdba92c6b965b2699808248734689cc55799c1",
                "Gateway": "172.18.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.18.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:12:00:02",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "fa839e57d07482cb79a3989cb0c58ee55c6fafdd156cd2217648653a7963e2c2",
                        "EndpointID": "91c0563ab8007aaeb5f26b6affbdba92c6b965b2699808248734689cc55799c1",
                        "Gateway": "172.18.0.1",
                        "IPAddress": "172.18.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:12:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    

    进入当前正在运行的容器

    # 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
    
    # 命令
    docker exec -it 容器id bashShell
    
    # 测试
    [root@iz2zeakqdima07k787wct3z /]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    9961c3fb674e        centos              "/bin/bash"         8 minutes ago       Up 8 minutes                            eloquent_pike
    [root@iz2zeakqdima07k787wct3z /]# docker exec -it 9961c3fb674e /bin/bash
    [root@9961c3fb674e /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@9961c3fb674e /]# ps -ef 
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 12:05 pts/0    00:00:00 /bin/bash
    root        14     0  0 12:15 pts/1    00:00:00 /bin/bash
    root        29    14  0 12:15 pts/1    00:00:00 ps -ef
    [root@9961c3fb674e /]# 
    
    # 方式二
    docker attach 容器id
    # 测试
    [root@9961c3fb674e /]# docker attach dkjdf932jkd
    正在执行当前代码...
    
    # docker exec       # 进入容器后开启一个新的终端,可以再里面操作(常用)
    # docker attach     # 进入容器正在执行的终端,不会启动新的进程
    

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

    docker cp 容器id:容器内路径 目的地主机路径
    
    # 查看当前主机目录下
    [root@iz2zeakqdima07k787wct3z /]# cd /home
    [root@iz2zeakqdima07k787wct3z home]# ls
    www
    [root@iz2zeakqdima07k787wct3z home]# touch rgh.java
    [root@iz2zeakqdima07k787wct3z home]# ls
    rgh.java  www
    [root@iz2zeakqdima07k787wct3z home]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    9961c3fb674e        centos              "/bin/bash"         20 minutes ago      Up 20 minutes                           eloquent_pike
    # 进入docker容器内部
    [root@iz2zeakqdima07k787wct3z home]# docker attach 9961c3fb674e
    [root@9961c3fb674e /]# cd /home
    [root@9961c3fb674e home]# ls
    # 在容器内新建一个文件
    [root@9961c3fb674e home]# touch test.java
    [root@9961c3fb674e home]# exit
    exit
    [root@iz2zeakqdima07k787wct3z home]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@iz2zeakqdima07k787wct3z home]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    9961c3fb674e        centos              "/bin/bash"         21 minutes ago      Exited (0) 16 seconds ago                       eloquent_pike
    # 将这个文件拷贝出来到主机上
    [root@iz2zeakqdima07k787wct3z home]# docker cp 9961c3fb674e:/home/test.java /home
    [root@iz2zeakqdima07k787wct3z home]# ls
    rgh.java  test.java  www
    [root@iz2zeakqdima07k787wct3z home]# 
    
    # 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现
    

    5. 小练习

    Docker 安装 Nginx

    # 1. 搜索镜像 search 建议大家去docker搜索,可以看帮助文档
    # 2. 下载镜像 pull
    # 3. 运行测试
    [root@iz2zeakqdima07k787wct3z home]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              831691599b88        7 days ago          215MB
    nginx               latest              2622e6cca7eb        2 weeks ago         132MB
    # -d 后台运行
    # --name 给容器命名
    # -p 宿主机:容器内部端口
    [root@iz2zeakqdima07k787wct3z home]# docker run -d --name nginx01 -p 3344:80 nginx
    67e9aadbc5beba070a5f944f9c3402abdbb7c4012d668cf6e1bce6782e2ed496
    [root@iz2zeakqdima07k787wct3z home]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    67e9aadbc5be        nginx               "/docker-entrypoint.…"   4 seconds ago       Up 4 seconds        0.0.0.0:3344->80/tcp   nginx01
    [root@iz2zeakqdima07k787wct3z home]# curl localhost:3344
    # 进入容器
    [root@iz2zeakqdima07k787wct3z home]# docker exec -it nginx01 /bin/bash
    root@67e9aadbc5be:/# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    root@67e9aadbc5be:/# cd /etc/nginx
    root@67e9aadbc5be:/etc/nginx# ls
    conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf
    root@67e9aadbc5be:/etc/nginx# 
    

    docker 来装一个tomcat

    # 官方的使用
    docker run -it --rm tomcat:9.0
    
    # 我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm,一般用来测试,用完就删除
    
    # 下载再启动
    docker pull tomcat:9.0
    
    # 启动运行
    docker run -d -p 3355:8080 --name tomcat01 tomcat
    
    # 测试访问没有问题
    
    # 进入容器
    [root@iz2zeakqdima07k787wct3z home]# docker exec -it tomcat01 /bin/bash
    
    # 发现问题,1.linux命令少了,2. 没有webapps,阿里云镜像的原因。默认是最小的镜像,所以不必要的都删除。
    # 保证最小可运行环境
    

    部署es+kibana

    # es 暴露的端口很多!
    # es 十分好内存
    # es 的数据一般需要放置到安全目录!挂载
    # --net somenetwork ? 网络配置
    
    # 启动 elasticsearch
    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
    
    # 启动了 linux就卡住了 docker stats 查看 cpu的状态
    
    # 测试一下es是否成功了
    [root@iz2zeakqdima07k787wct3z home]# curl localhost:9200
    {
      "name" : "db726853b109",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "ghqkJlJwRL-2owApgkFDSQ",
      "version" : {
        "number" : "7.6.2",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
        "build_date" : "2020-03-26T06:34:37.794943Z",
        "build_snapshot" : false,
        "lucene_version" : "8.4.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    
    # es 是十分耗内存的,
    
    # 查看docker stats
    # 赶紧关闭,增加内存的限制
    
    # 赶紧关闭,增加内存的限制,修改配置文件 -e 环境配置修改
    docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
    
    [root@iz2zeakqdima07k787wct3z home]# curl localhost:9200
    {
      "name" : "27eac4f72c36",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "vCYTkXKtSDya7KgA1FLDRg",
      "version" : {
        "number" : "7.6.2",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
        "build_date" : "2020-03-26T06:34:37.794943Z",
        "build_snapshot" : false,
        "lucene_version" : "8.4.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    

    可视化

    • portainer(先用这个)
    docker run -d -p 8088:9000 \ 
    --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    
    • Rancher(CI/CD再用)

    什么是portainer?

    Docker图形化界面管理工具!提供一个后台面板供我们操作!

    docker run -d -p 8088:9000 \
    --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    

    访问测试:外网:8088

    Docker镜像讲解

    commit镜像

    docker commit 提交容器成为一个新的副本
    
    # 命令和git原理类似
    docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
    

    实战测试

    # 1. 启动tomcat -t交互模式启动 -p暴露端口
    [root@iz2zeakqdima07k787wct3z ~]# docker run -it -p 8080:8080 tomcat
    # 2. 进入当前正在运行的容器
    [root@iz2zeakqdima07k787wct3z ~]# docker exec -it 581d51481525 /bin/bash
    # 3. 发现这个默认的tomcat 是没有webapps应用,镜像原因,官方的镜像默认webapps是没有文件的!
    
    # 4. 我自己拷贝进去了基本的文件
    root@581d51481525:/usr/local/tomcat# cp -r webapps.dist/* webapps
    root@581d51481525:/usr/local/tomcat# cd webapps
    root@581d51481525:/usr/local/tomcat/webapps# ls
    ROOT  docs  examples  host-manager  manager
    root@581d51481525:/usr/local/tomcat/webapps# 
    # 5. 将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像
    [root@iz2zeakqdima07k787wct3z ~]# docker commit -a="rgh" -m="add webapps app" 581d51481525 tomcat02:1.0
    sha256:7d44ce4e447ce90ca2f9d342c30fc4f4720a680a11f6ba3b183ac66f46ef2c55
    [root@iz2zeakqdima07k787wct3z ~]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    tomcat02              1.0                 7d44ce4e447c        7 seconds ago       652MB
    centos                latest              831691599b88        8 days ago          215MB
    tomcat                9.0                 2eb5a120304e        2 weeks ago         647MB
    tomcat                latest              2eb5a120304e        2 weeks ago         647MB
    nginx                 latest              2622e6cca7eb        2 weeks ago         132MB
    portainer/portainer   latest              cd645f5a4769        3 weeks ago         79.1MB
    elasticsearch         7.6.2               f29a1ee41030        3 months ago        791MB
    [root@iz2zeakqdima07k787wct3z ~]# 
    
    

    相关文章

      网友评论

          本文标题:Docker(1)-Docker的安装-常用命令

          本文链接:https://www.haomeiwen.com/subject/wuwdfktx.html