联系客服
客服二维码

联系客服获取更多资料

微信号:LingLab1

客服电话:010-82185409

意见反馈
关注我们
关注公众号

关注公众号

linglab语言实验室

回到顶部
Docker从入门到精通系列(一):初识Docker(概述、安装、常用命令)

227 阅读 2020-09-24 09:08:02 上传

以下文章来源于 西语语言学工作坊

Docker概述

Docker为什么会出现?

多套环境(开发环境、准生产环境、生产环境)环境、版本不一致导致不能运行配置、部署繁琐

Docker解决了以上问题,以前我们开发都是打个jar或war包交给运维来部署,现在使用Docker会将jar + 环境打包生成个镜像放在镜像仓库,直接下载我们的镜像运行即可。

Docker的核心思想其实来源于集装箱,每个箱子都是相互隔离的,其中一个箱子出问题不会影响其他箱子。举个例子:

假如我们使用的Linux系统就是这个鲸鱼,没有集装箱的时候,我们不能把毒药和水果放在一起吧,放在一起会出问题的,但是有了集装箱以后,我们可以一个集装箱放水果,一个集装箱放毒药,互不影响。Docker的出现可以让Linux的空间得到极大的利用。

Docker为什么这么火?

Docker是基于Go语言开发的。相比于早期的虚拟机技术,最大的有点就是轻巧!Docker隔离、镜像(比如jdk、mysql、redis...)非常小巧,运行镜像也就几兆,有的甚至几KB。而VMware等动则几个G设置十几个G。

Docker能干嘛?

DevOps(开发运维)

应用更快速的交付、部署

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

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

更便捷的升级和扩容

使用了Docker,部署应用就像搭积木一样

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

更简单的系统运维

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

更高效的计算资源利用

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

Docker安装

文档

文档地址:https://docs.docker.com/engine/install/centos/

安装步骤

卸载旧版本

$ sudo yum remove docker \                  docker-client \                  docker-client-latest \                  docker-common \                  docker-latest \                  docker-latest-logrotate \                  docker-logrotate \                  docker-engine

安装 yum-utils 包(它提供 yum-config-manager 实用工具)并设置稳定存储库。

sudo yum install -y yum-utils

设置默认仓库

$ sudo yum-config-manager \    --add-repo \    https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的sudo yum-config-manager --add-repo \        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里云镜像

安装最新版本的 Docker Engine 和 containerd, docker-ce社区版,docker-ee企业版

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

启动Docker

$ sudo systemctl start docker

通过运行 hello-world 映像来验证 Docker Engine 安装是否正确。

$ sudo docker run hello-world

查看镜像

docker images

卸载Docker

$ sudo yum remove docker-ce docker-ce-cli containerd.io
$ sudo rm -rf /var/lib/docker

使用阿里云镜像加速

登录阿里云

找到 容器镜像服务

如果没有就创建一个

点击镜像加速器

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

Docker命令

帮助命令

帮助命令

docker versiondocker infodocker --help

帮助文档:https://docs.docker.com/engine/reference/commandline/docker/

镜像命令

文档地址:https://docs.docker.com/engine/reference/commandline/images/

docker images [OPTIONS] [REPOSITORY[:TAG]]
Name, shorthandDefaultDescription
--all , -a
显示所有镜像(默认隐藏当前镜像)
--digests
展示摘要
--filter , -f
基于提供的条件的过滤器输出
--format
使用 Go 模板的漂亮打印图像
--no-trunc
不要截断输出
--quiet , -q
只显示数字 id

搜索

文档地址:https://docs.docker.com/engine/reference/commandline/search/

docker search [OPTIONS] TERM
Name, shorthandDefaultDescription
--automated
只显示自动构建
--filter , -f
基于提供的条件的过滤器输出
--format
使用 Go 模板进行漂亮印刷的搜索
--limit25搜寻结果的最大数目
--no-trunc
不要截断输出
--stars , -s
只显示至少 x 颗星星

下载镜像

文档地址:https://docs.docker.com/engine/reference/commandline/push/

docker push [OPTIONS] NAME[:TAG]
Name, shorthandDefaultDescription
--disable-content-trusttrue跳过镜像签名

删除镜像

文档地址:https://docs.docker.com/engine/reference/commandline/rmi/

docker rmi [OPTIONS] IMAGE [IMAGE...]
Name, shorthandDefaultDescription
--force , -f
强制删除镜像
--no-prune
不删除无标签的

容器命令

下载centos镜像

docker pull centos

启动容器

docker run [可选参数] image#参数说明--name  容器名字-d 后台方式运行-it 交互方式运行 进入容器查看内容-p 指定端口 -p 8080:8080 和主机的端口映射        -p IP:主机端口:容器端口        -p 主机端口:容器端口(常用)        -p 容器端口        容器端口-P 随机映射端口
docker run -it centos /bin/bash

Docker所有运行的容器

docker ps-a #列出当前正在运行的容器+历史运行过的容器-n=? #显示最近创建的容器-q #只显示容器的编号

退出容器

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 镜像名

查看日志命令

docker logs 容器IDdocker logs --helpOptions:      --details        Show extra details provided to logs  -f, --follow         Follow log output      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)      --tail string    Number of lines to show from the end of the logs (default "all")  -t, --timestamps     Show timestamps      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)docker logs -tf --tail 10 #查看最新10条日志

查看容器进程信息

docker top 容器ID

查看镜像元数据

docker inspect --helpOptions:  -f, --format string   Format the output using the given Go template  -s, --size            Display total file sizes if the type is container      --type string     Return JSON for specified type
docker inspect 0ed9c92a3359[    {        "Id": "0ed9c92a3359a4562115989cc1686f1c28b9e779385e8d5538f7cad4836f6d5f",        "Created": "2020-07-07T00:36:11.958148146Z",        "Path": "docker-entrypoint.sh",        "Args": [            "mysqld"        ],        "State": {            "Status": "running",            "Running": true,            "Paused": false,            "Restarting": false,            "OOMKilled": false,            "Dead": false,            "Pid": 21414,            "ExitCode": 0,            "Error": "",            "StartedAt": "2020-07-07T00:47:16.979329147Z",            "FinishedAt": "2020-07-07T00:47:16.63257377Z"        },        "Image": "sha256:44a8e1a5c0b27650237907f4e9ee7fccdba0120291d27075e2cb8c8e8a8ec66b",        "ResolvConfPath": "/var/lib/docker/containers/0ed9c92a3359a4562115989cc1686f1c28b9e779385e8d5538f7cad4836f6d5f/resolv.conf",        "HostnamePath": "/var/lib/docker/containers/0ed9c92a3359a4562115989cc1686f1c28b9e779385e8d5538f7cad4836f6d5f/hostname",        "HostsPath": "/var/lib/docker/containers/0ed9c92a3359a4562115989cc1686f1c28b9e779385e8d5538f7cad4836f6d5f/hosts",        "LogPath": "/var/lib/docker/containers/0ed9c92a3359a4562115989cc1686f1c28b9e779385e8d5538f7cad4836f6d5f/0ed9c92a3359a4562115989cc1686f1c28b9e779385e8d5538f7cad4836f6d5f-json.log",        "Name": "/mymysql",        "RestartCount": 0,        "Driver": "overlay2",        "Platform": "linux",        "MountLabel": "",        "ProcessLabel": "",        "AppArmorProfile": "",        "ExecIDs": [            "e0bfc0c67ff4d16cc70f83a47fed2f9eba37b8f42ab7db68cadf04da5b5519a1"        ],        "HostConfig": {            "Binds": null,            "ContainerIDFile": "",            "LogConfig": {                "Type": "json-file",                "Config": {}            },            "NetworkMode": "default",            "PortBindings": {                "3306/tcp": [                    {                        "HostIp": "",                        "HostPort": "3306"                    }                ]            },            "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/4e4d51419c11cb22784160aa0ec2d9439d3c0b96de6c7d60cf8b503871c99859-init/diff:/var/lib/docker/overlay2/d80494f65004d34717bc6c791cbe881729fd2c0846b3f2e0154ffaf95425d1c6/diff:/var/lib/docker/overlay2/ca45ec4c3bd06a2ef9503df96d7ba32912aee58fa9f8f4cfac2c2b28a6358662/diff:/var/lib/docker/overlay2/02f46b0788697cc0cc150afba025648d24c18ce56307a32b9986140f4fe860d4/diff:/var/lib/docker/overlay2/581596595f1448614c334eb470481fc70a638601f1f81ebe63d6ff8f9f45330e/diff:/var/lib/docker/overlay2/404848294a3253d680450f61ee901ed76c63b9339904ba70e5cd505041414e11/diff:/var/lib/docker/overlay2/5cdba39d722214767eb4fc8040f6222e9582330d5e1910cc44898b88906ff403/diff:/var/lib/docker/overlay2/f201bf786f050af48f5b1f0d6c949bf0f7942c4433b3167c57fc80d7a96d8e6d/diff:/var/lib/docker/overlay2/76d7620a0bc93ba249a614d6b4e201982e99fe5285ed81fb68d6957bce6b61df/diff:/var/lib/docker/overlay2/ab95b6395ae0e52ca93a7224d17fabc1c0ce4b4e145908cace83968e6f2716c2/diff:/var/lib/docker/overlay2/4250bddc52068730181d0b22be7c889963582e43806c49c5c26740f948fcaedb/diff:/var/lib/docker/overlay2/79fc77b97e314b9f4f15be663c2df80b23a9ea8004897c0e2f2301e2260f5d67/diff",                "MergedDir": "/var/lib/docker/overlay2/4e4d51419c11cb22784160aa0ec2d9439d3c0b96de6c7d60cf8b503871c99859/merged",                "UpperDir": "/var/lib/docker/overlay2/4e4d51419c11cb22784160aa0ec2d9439d3c0b96de6c7d60cf8b503871c99859/diff",                "WorkDir": "/var/lib/docker/overlay2/4e4d51419c11cb22784160aa0ec2d9439d3c0b96de6c7d60cf8b503871c99859/work"            },            "Name": "overlay2"        },        "Mounts": [            {                "Type": "volume",                "Name": "86b9eec00f8d1e9cb4a9bce274ab418fd87d7d58d0a15981f45ed4e9a6e19270",                "Source": "/var/lib/docker/volumes/86b9eec00f8d1e9cb4a9bce274ab418fd87d7d58d0a15981f45ed4e9a6e19270/_data",                "Destination": "/var/lib/mysql",                "Driver": "local",                "Mode": "",                "RW": true,                "Propagation": ""            }        ],        "Config": {            "Hostname": "0ed9c92a3359",            "Domainname": "",            "User": "",            "AttachStdin": false,            "AttachStdout": false,            "AttachStderr": false,            "ExposedPorts": {                "3306/tcp": {}            },            "Tty": false,            "OpenStdin": false,            "StdinOnce": false,            "Env": [                "MYSQL_ROOT_PASSWORD=123456",                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",                "GOSU_VERSION=1.7",                "MYSQL_MAJOR=5.7",                "MYSQL_VERSION=5.7.18-1debian8"            ],            "Cmd": [                "mysqld"            ],            "Image": "mysql:5.7.18",            "Volumes": {                "/var/lib/mysql": {}            },            "WorkingDir": "",            "Entrypoint": [                "docker-entrypoint.sh"            ],            "OnBuild": null,            "Labels": {}        },        "NetworkSettings": {            "Bridge": "",            "SandboxID": "47a98d0324694a55361b2ca5ce2838a648f8023ba1724ac395f74efb978b3e03",            "HairpinMode": false,            "LinkLocalIPv6Address": "",            "LinkLocalIPv6PrefixLen": 0,            "Ports": {                "3306/tcp": [                    {                        "HostIp": "0.0.0.0",                        "HostPort": "3306"                    }                ]            },            "SandboxKey": "/var/run/docker/netns/47a98d032469",            "SecondaryIPAddresses": null,            "SecondaryIPv6Addresses": null,            "EndpointID": "f3310c3928294d7edbc20ec1847b34996ec691e382bf1d4a3ca645e498387c77",            "Gateway": "172.17.0.1",            "GlobalIPv6Address": "",            "GlobalIPv6PrefixLen": 0,            "IPAddress": "172.17.0.3",            "IPPrefixLen": 16,            "IPv6Gateway": "",            "MacAddress": "02:42:ac:11:00:03",            "Networks": {                "bridge": {                    "IPAMConfig": null,                    "Links": null,                    "Aliases": null,                    "NetworkID": "e6ff23e009d3b064d64225694d33eae351285942c60d91d90c3b09834dd85f31",                    "EndpointID": "f3310c3928294d7edbc20ec1847b34996ec691e382bf1d4a3ca645e498387c77",                    "Gateway": "172.17.0.1",                    "IPAddress": "172.17.0.3",                    "IPPrefixLen": 16,                    "IPv6Gateway": "",                    "GlobalIPv6Address": "",                    "GlobalIPv6PrefixLen": 0,                    "MacAddress": "02:42:ac:11:00:03",                    "DriverOpts": null                }            }        }    }]

进入容器

docker exec -it 容器ID /bin/bash #进入容器后开启新的终端
docker attach 容器ID # 进入容器正在执行的终端,不会启动新的进程

从容器拷贝文件到宿主机

docker cp 容器ID:容器内路径 宿主机路径

查看容器状态

docker stats

常用命令小结

attach   Attach to a running container   #当前she11下attach 连接指定运行镜像build   Build an image from a Dockerfile   #通过Dockerfile定制镜像commit   Create a new image from a container changes    #提交当前容器为新的镜像cp   Copy files/folders from the containers filesystem to the host path    #从容器中拷贝指定文件或者目录到宿主机中create   Create a new container    #创建一个新的容器,同run, 但不启动容器diff   Inspect changes on a container's fi lesystem       #查看docker容器变化events   Get rea1 time events from the server    #从docker 服务获取容器实时事件exec   Run a command in an existing container    #在已存在的容器上运行命令export   Stream the contents of a container as a tar archive    #导出容器的内容流作为一个tar 归档文件【对应import history   Show the history of an image    #展示一个镜像形成历史images   List images    #列出系统当前镜像import   Create a new filesystem image from the contents of a tarba11    #从tar包中的内容创建个新的文件系统映像【对应export】info   Display systemwide information    #显示系统相关信息inspectReturn   1ow1eve1 information on a container    #查看容器详细信息ki11   Ki11 a running container    # ki11指定docker 容器load   Load an timage from a tar archive    #从一个tar包中加载一个镜像【对应save】login    Register or Login to the docker registry server    #注册或者登陆一个docker源服务器logout    Log out from a Docker registry server    #从当前Docker registry 退出logs    Fetch the logs of a container    #输出当前容器日志信息port    Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    #查看映射端口对应的容器内部源端口pause    Pause a11 processes within a container    #暂停容器ps    List containers    #列出容器列表pu11    Pu11 an image or a repository from the docker registry server    #从docker镜像源服务器拉取指定镜像或者库镜像push    Push an image or a repository to the docker registry server    #推送指定镜像或者库镜像至docker源服务器restart    Restart a running container    #重启运行的容器rm    Remove one or more containers    #移除一个或者多个容器rmi    Remove one or more images    #移除一个或多个镜像【无容器使用该镜像才可删除,否则需删除相关容器才可继续或-f强制删除】run     Run a command in a new container             #创建一个新的容器并运行一个命令save         Save an image to a tar archive         #保存一个镜像为一个tar包【对应1oad】search         Search for an image on the Docker Hub         #在docker hub中搜索镜像start         Start a stopped containers         #启动容器stop         Stop a running containers         #停止容器tag         Tag an image into a repository         #给源中镜像打标签top     Lookup the running processes of a container         #查看容器中运行的进程信息unpause     Unpause a paused container         #取消暂停容器version     Show the docker version informati on     #查看docker版本号wait      B1ock until a container. stopsthen print its exit code     #截取容器停止时的退出状态值

docker安装Nginx练习

下载镜像

docker pull nginx

启动容器

docker imagesdocker run -d --name nginx01 -p 3344:80 nginx# -d 后台运行 # --name 给容器起个名# -p 将公网的3344端口暴露给容器的80端口

docker安装Tomcat练习

下载Tomcat镜像

docker pull tomcat

运行容器

docker run -d --name tomcat01 -p 3355:8080 tomcat

docker 安装es+kibana练习

# es暴露的端口十分多# es十分耗内存# es的数据一般要挂载到安全目录docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPS="-Xms64m -Xmx512m" elasticsearch:7.6.2


点赞
收藏
表情
图片
附件