【Docker】Docker基础入门

官网下载速度太慢,使用国内镜像节点下载:Docker镜像下载链接

配置阿里云镜像地址:阿里云镜像配置

一、安装验证

  1. 版本号:
    docker --version
    docker-compose --version
  2. docker配置信息:
    docker info
  3. docker run 来在容器内运行一个应用程序
    docker run ubuntu:15.10 /bin/echo "Hello world"
    各个参数方法:
    docker: Docker 的二进制执行文件。
    run: 与前面的 docker 组合来运行一个容器。
    ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    /bin/echo “Hello world”: 在启动的容器里执行的命令
  4. 查看下载的镜像文件
    docker images
    在这里插入图片描述

二、基本命令总结

1、镜像命令
  1. 查看现有镜像 docker images
    在这里插入图片描述
    可选项:
    docker images -all:列出所有的镜像
    docker images -quiet:只显示镜像id
    docker images -f

  2. 搜索镜像 docker search mysql
    在这里插入图片描述
    可选项:
    docker search mysql --filter=STARS=3000 :列出搜索大于3000的镜像
    在这里插入图片描述

  3. 下载镜像 docker pull 镜像名[:tag]
    指定版本下载: git pull mysql:5.7.5
    在这里插入图片描述

  4. 删除镜像docker rmi -f [IMAGE ID]
    删除单个:docker rmi -f e1d7dc9731da
    批量删除:docker rmi -f $(docker images -aq)
    在这里插入图片描述

2、容器命令
  1. 下载一个镜像创建容器:docker pull centos
  2. 新建容器并启动:

docker run [可选参数] image


// 参数说明
–name=“Name” 容器名称
-d: 后台运行(后台没有进程会自动关闭)
-it: 使用交互方式运行(可进入容器查看哪内容)
-p: 容器端口 -p 8080:8080(主机端口:容器端口)

-P: 随机指定端口

  • 启动并进入容器:docker run -it centos /bin/bash
    在这里插入图片描述
  • 查看正在运行的容器:docker ps
    曾经所有运行的容器:docker ps -a 在这里插入图片描述
    指定显示容器个数:docker ps -a -n=1
    在这里插入图片描述
    只显示容器编号:docker ps -aq
    在这里插入图片描述
  1. 退出容器

Ctrl + P + Q 容器不停止退出
exit 容器停止并退出

  1. 删除容器
    docker rm [容器id] 删除指定的容器
    docker rm -f $(docker ps -aq) -f 递归删除所有的容器
  2. 启动和停止容器
    docker start [容器id] 启动容器
    docker restart [容器id] 重启容器
    docker stop [容器id] 停止容器
    docker kill [容器id] 强行停止容器
3、常用的命令
  1. 后台启动容器:docker run -d centos
    在这里插入图片描述
  2. 查看日志:docker logs -f -t --tail 10 a06673a6aa43

-t -f 显示全部日志
–tail 10 日志id 显示10条log

  1. 查看容器中进程信息:docker top 容器id
    在这里插入图片描述
  2. 查看镜像元数据:docker inspect 容器id
[
    {
        "Id": "a06673a6aa43c47a5517574cb77c5867c3f6632b6c427877e8ce4acf9f855d23", // 容器id
        "Created": "2020-10-03T03:14:17.0791137Z", // 创建时间
        "Path": "bin/bash",
        "Args": [], // 脚本内容
        "State": {
            "Status": "running", // 当前容器状态
            "Running": true, // running
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3031, // 父进程id
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-10-03T03:14:17.446815Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": "/var/lib/docker/containers/a06673a6aa43c47a5517574cb77c5867c3f6632b6c427877e8ce4acf9f855d23/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/a06673a6aa43c47a5517574cb77c5867c3f6632b6c427877e8ce4acf9f855d23/hostname",
        "HostsPath": "/var/lib/docker/containers/a06673a6aa43c47a5517574cb77c5867c3f6632b6c427877e8ce4acf9f855d23/hosts",
        "LogPath": "/var/lib/docker/containers/a06673a6aa43c47a5517574cb77c5867c3f6632b6c427877e8ce4acf9f855d23/a06673a6aa43c47a5517574cb77c5867c3f6632b6c427877e8ce4acf9f855d23-json.log",
        "Name": "/vibrant_heyrovsky",
        "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/0bc87d0fd553b5eaac36ecb258f1cb0d1eb5d7ec9f3135f1f13099acd534a5d1-init/diff:/var/lib/docker/overlay2/bd7f7d5693967ba90aa360babc06138c67b4f55ad1b89f1e53842b3acd421eec/diff",
                "MergedDir": "/var/lib/docker/overlay2/0bc87d0fd553b5eaac36ecb258f1cb0d1eb5d7ec9f3135f1f13099acd534a5d1/merged",
                "UpperDir": "/var/lib/docker/overlay2/0bc87d0fd553b5eaac36ecb258f1cb0d1eb5d7ec9f3135f1f13099acd534a5d1/diff",
                "WorkDir": "/var/lib/docker/overlay2/0bc87d0fd553b5eaac36ecb258f1cb0d1eb5d7ec9f3135f1f13099acd534a5d1/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [], // 挂载
        "Config": {
            "Hostname": "a06673a6aa43", // 容器id缩写
            "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": "27200b989193b45e8da2b1c44b07b823fb7a16cf22eb91a299ffd93b5dc5b733",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/27200b989193",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "8ce5229043104fe0a2f7440a8910f1055b2299f6604d7e45ecd3a3ac88908db4",
            "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": "5ad60df7dcdd38897edd63387153b0ff7ff9e292e2df9444609a3ec93bb35d7f",
                    "EndpointID": "8ce5229043104fe0a2f7440a8910f1055b2299f6604d7e45ecd3a3ac88908db4",
                    "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
                }
            }
        }
    }
]
  1. 进入正在运行的容器:
    方式一:docker exec -it 容器id /bin/bash
    方式二:docker attach 容器id 进入正在执行的终端
  2. 容器内拷贝文件:
    docker cp 【容器id】:【需要cp的文件路径】 【拷贝出来的存放路径】

三、基本的部署

1、部署Nginx
  1. 搜索镜像:docker search nginx

  2. 下载镜像:docker pull nginx

  3. 查看镜像:docker images
    在这里插入图片描述

  4. 运行镜像:docker run -d --name nginx01 -p 3344:80 nginx (3344:80 代表 ‘外网端口号:容器内端口号’)
    在这里插入图片描述

  5. 查看运行镜像:docker ps

  6. 本机自测:curl localhost:3344
    在这里插入图片描述

  7. 容器内启动的80端口号的nginx映射到外部的3344端口服务上了
    在这里插入图片描述

  8. 映射关系
    在这里插入图片描述

2、部署Tomcat
  1. docker run -it --rm tomcat:9.0 停止后删除容器
  2. 启动容器:docker run -d -p 3355:8080 --name tomcat01 tomcat
  3. docker下载镜像默认是最小的,所以webapps为空,复制webapps.dist到webapps cp -r webapps.dist/* webapps
    在这里插入图片描述
  4. 成功访问到tomcat
    在这里插入图片描述
3、部署elasticsearch + Kibana
  1. 下载容器:
    docker pull elasticsearch
    docker pull kibana

  2. 启动elasticsearch:docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -p 5601:5601 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch
    ES_JAVA_OPTS="-Xms64m -Xmx512m" 设置最大占用内存
    安装启动成功
    如上显示表明ES安装成功,接下来我们需要安装可视化界面kibana

  3. 启动kibana:docker run -it -d -e ELASTICSEARCH_URL=http://localhost:9200 --name kibana --network=container:elasticsearch kibana

network=container:elasticsearch container是docker网络模式的一种,表示和指定容器共用一个网卡, 使用方式:network = container:容器名_or_容器id(网桥模式参见docker网络章节)

请求:localhost:5601/app/kibana出现如下界面说明配置成功
在这里插入图片描述

  1. ES连接Kibana流程
    在这里插入图片描述

四、可视化面板portainer

运行启动:docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
在这里插入图片描述

五、Commit

  1. 提交命令:docker commit -m="提交信息" -a="作者" 容器id 目标镜像名:Tag
  2. 提交自己的镜像:docker commit -a="jesse.tang" -m="add webapps msg" ef38edf002af tomcat01:1.0
    在这里插入图片描述

六、容器数据卷

容器间数据共享技术,docker容器中产生的数据,同步到本地!
容器持久化和同步操作,容器间数据共享
在这里插入图片描述

  1. 挂载方式:直接使用命令挂载-v docker run -it -v 主机目录:容器目录 容器 /bin/bash
    测试:
    docker run -it --name centos01 -v /Users/touyoshitaka/Documents/docker_data:/home centos /bin/bash
    在这里插入图片描述

  2. 部署并同步MySQL数据
    (1)启动容器docker run -d -p 3310:3306 -v /Users/touyoshitaka/Documents/docker_mysql/conf:/etc/mysql/conf.d -v /Users/touyoshitaka/Documents/docker_mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
    mysql密码:-e MYSQL_ROOT_PASSWORD=123456
    同步配置:-v /Users/touyoshitaka/Documents/docker_mysql/conf:/etc/mysql/conf.d
    同步数据:-v /Users/touyoshitaka/Documents/docker_mysql/data:/var/lib/mysql
    (2)本地连接测试:
    在这里插入图片描述
    (3)测试数据同步:
    本机新建test数据库 -》同步文件夹下新增test目录
    初始化数据库
    同步data

1、具名挂载和匿名挂载
  • 匿名挂载 -v 容器内路径
    docker run -d -P -v /etc/nginx --name nginx11 nginx

    DRIVER VOLUME NAME
    local 19b0cf512f1c2648ccae3c01711a67c144f656a4082e43c977c573c2bb7ef9fb

  • 具名挂载 -v 卷名:容器内路径

    1. docker run -d -P -v juming-nginx:/etc/nginx --name nginx11 nginx
    2. docker vloume ls
      在这里插入图片描述
    3. 挂载路径 docker volume inspect juming-nginx
      在这里插入图片描述
  • 读写权限(设置后容器会限制权限)

    1. 只读:-v 卷名:容器内路径:ro 此路径只能通过宿主机修改,容器内不可修改
      docker run -d -P -v juming-nginx:/etc/nginx:ro --name nginx11 nginx
    2. 读写:-v 卷名:容器内路径:rw
      docker run -d -P -v juming-nginx:/etc/nginx:rw --name nginx11 nginx

七、DockerFile

用来构建镜像
前两章说的 docker commit 镜像 是手动创建

1、构建Dockerfile实现步骤
  1. 创建镜像文件:vim [文件名] vim dockerfile1
// 文件指令都是大写的参数
FROM centos
VOLUME ["volume01","volume02"] // 挂载匿名数据卷
CMD echo "=====end====="
CMD /bin/bash
  1. 执行文件脚本:
    docker build -f [dockerfile文件路径] -t [容器名称]
    docker build -f /Users/touyoshitaka/Documents/docker_dockerfile/dockerfile1 -t jesse/centos:1.0 .
    在这里插入图片描述

  2. 启动自己容器:docker run -it [容器id] /bin/bash
    在这里插入图片描述

  3. 查看容器挂载路径:docker inspect [容器ID] -》 Mounts
    在这里插入图片描述

2、容器间共享数据

多个容器共享数据
父容器:docker run -it --name centes01 jesse/centos:1.0
子容器:docker run -it --name centes02 --volumes-from centos01 jesse/centos:1.0
继承容器:--volumes-from [父容器]

在这里插入图片描述
在这里插入图片描述

mysql 数据同步

父容器:docker run -d -p 3310:3306 -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 jesse/mysql:1.0
子容器:docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql02 jesse/mysql:1.0

3、DockerFile指令

在这里插入图片描述

FROM  				 # 基础镜像
MAINTAINER     		 # 镜像作者 姓名 + 邮箱
RUN 				 # 运行镜像构建的命令
ADD 				 #	步骤:Tomcat镜像,这个Tomcat压缩包,添加内容。
WORKWORKDIR			 # 工作目录
VOLUME				 # 挂载目录
EXPOSE			  	 # 暴露端口
CMD 				 # 指定这个容器启动运行的命令,最后一个被执行,可被代替(执行命令启动的命令会覆盖dockerfile中CMD的命令)
ENTRYPOINT			 # 指定这个容器启动运行的命令,可以追加命令
ONBUILD 			 # 构建一个dockerfile会触发这个命令
COPY  				 # 类似ADD,文件拷贝到镜像中
ENV					 # 构建环境变量
4、构建centos镜像
  1. 制作脚本
    在这里插入图片描述

  2. 制作脚本:
    (1)进入dockerfile目录:docker build -f [dockerfile] -t [镜像名称] .
    在这里插入图片描述

    (2)运行:docker run -it [IMAGE ID]
    (3)镜像构架过程/历史:
    在这里插入图片描述

5、构建Tomcat镜像

准备镜像文件和jdk压缩包(tomcat依赖java环境)

(1)构建Dockerfile:

FROM centos  // 基础镜像
MAINTAINER jesse<1430482733@qq.com>

COPY README.md /usr/local/README.md  // copy
ADD apache-tomcat-9.0.39.tar.gz /usr/local/  //解压缩tomcat到/usr/local下
ADD jdk-8u212-linux-x64.tar.gz /usr/local/

RUN yum -y install vim // 安装vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

// 配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_212
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.39
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.39
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

// 端口号
EXPOSE 8080

// 启动tomcat && 打印日志
CMD /usr/local/apache-tomcat-9.0.39/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.39/bin/logs/catalina.out

(2)构建dockerfile镜像:

默认名称Dockerfile,不需要指定file路径,会自动寻找该路径下的Dockerfile文件

docker build -t [镜像名] .

(3)执行命令:
docker run -d -p 8080:8080 --name jessetomcat -v /Users/touyoshitaka/Documents/docker_dockerfile/tomcat/tomcat_data:/usr/local/apache-tomcat-9.0.39/webapps -v /Users/touyoshitaka/Documents/docker_dockerfile/tomcat/tomcat_logs:/usr/local/apache-tomcat-9.0.39/logs diy_tomcat

# 基本参数: docker run -d -p 8080:8080 --name jessetomcat
# webapps挂载: -v /Users/touyoshitaka/Documents/docker_dockerfile/tomcat/tomcat_data:/usr/local/apache-tomcat-9.0.39/webapps/test
# logs挂载: -v /Users/touyoshitaka/Documents/docker_dockerfile/tomcat/tomcat_logs:/usr/local/apache-tomcat-9.0.39/logs
# 镜像: diy_tomcat
6、发布镜像到阿里云
  1. 创建镜像仓库
  2. 上传下载镜像,如下图
    在这里插入图片描述

八、Docker网络

1、自定义网络

原本容器间网络是不互通的,自定义网络可以使容器ping通过,这个网络就相当于一个路由,配置相同的路由网段相同,所有可以使容器互通。

  1. 创建一个内网(可以理解为一个路由)
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
    在这里插入图片描述
  2. docker network ls 查看当前所有network
    在这里插入图片描述
  3. --net mynet 指定使用自己的网络 (容器使用同一个网络网段互通)
    在这里插入图片描述
  4. docker inspect mynet 查看自定义网络中挂载的容器
    在这里插入图片描述
2、网络连通
  1. 启动一个新的容器,默认网卡:
    docker run -d -P --name tomcat-docker0 tomcat01:1.0
  2. 将tomcat-docker0挂载到mynet上:
    docker network connect mynet tomcat-docker0
  3. 查看mynet详细信息:
    docker inspect mynet
    在这里插入图片描述
  4. 测试网络连通
    docker exec -it tomcat-docker0 ping tomcat-net03
    在这里插入图片描述
3、题外话–网络操作指令

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼小鱼啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值