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/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://maculvvb.mirror.aliyuncs.com"]}EOF
sudo systemctl daemon-reloadsudo systemctl restart dockerDocker命令
帮助命令
帮助命令
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, shorthand | Default | Description |
--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, shorthand | Default | Description |
--automated | 只显示自动构建 | |
--filter , -f | 基于提供的条件的过滤器输出 | |
--format | 使用 Go 模板进行漂亮印刷的搜索 | |
--limit | 25 | 搜寻结果的最大数目 |
--no-trunc | 不要截断输出 | |
--stars , -s | 只显示至少 x 颗星星 |
下载镜像
文档地址:https://docs.docker.com/engine/reference/commandline/push/
docker push [OPTIONS] NAME[:TAG]| Name, shorthand | Default | Description |
--disable-content-trust | true | 跳过镜像签名 |
删除镜像
文档地址:https://docs.docker.com/engine/reference/commandline/rmi/
docker rmi [OPTIONS] IMAGE [IMAGE...]| Name, shorthand | Default | Description |
--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/bashDocker所有运行的容器
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 归档文件【对应importhistory 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 system一wide information #显示系统相关信息inspectReturn 1ow一1eve1 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. stops,then 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 tomcatdocker 安装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









