怎么样自己做网站接订单,垂直门户网站建设,新手公司网页设计模板,手机电脑网站✅作者简介#xff1a;CSDN内容合伙人、信息安全专业在校大学生#x1f3c6; #x1f525;系列专栏 #xff1a;【狂神说Java】 #x1f4c3;新人博主 #xff1a;欢迎点赞收藏关注#xff0c;会回访#xff01; #x1f4ac;舞台再大#xff0c;你不上台#xff0c… ✅作者简介CSDN内容合伙人、信息安全专业在校大学生 系列专栏 【狂神说Java】 新人博主 欢迎点赞收藏关注会回访 舞台再大你不上台永远是个观众。平台再好你不参与永远是局外人。能力再大你不行动只能看别人成功没有人会关心你付出过多少努力撑得累不累摔得痛不痛他们只会看你最后站在什么位置然后羡慕或鄙夷。 文章目录 前言一、Docker概述1. Docker为什么出现2. Docker的历史3. Docker能做什么 二、Docker安装1. Docker的基本组成2. 安装Docker3. 阿里云镜像加速4. 回顾hello-world流程5. 底层原理 三、Docker的常用命令1. 帮助命令2. 镜像命令dokcer imagesdocker searchdocker pulldocker rmi 3. 容器命令新建容器并启动列出所有运行的容器退出容器删除容器启动和停止容器的操作 4. 常用其他命令后台启动容器查看日志查看容器中进程的信息查看镜像的元数据进入当前正在运行的容器从容器内拷贝文件到主机上 5. 小结6. 作业练习docker安装nginxdocker安装tomcat部署ESkibana 7. 可视化什么是portainer ? 前言
给大家分享《三体》中的一句话很有感触弱小和无知不是生存的障碍傲慢才是。
Docker概述Docker安装Docker命令 镜像命令容器命令操作命令… Docker镜像容器数据卷DockerFile·Docker网络原理IDEA整合DockerDocker ComposeDocker SwarmCI\CDJenkins
一、Docker概述
1. Docker为什么出现
一款产品开发—上线 两套环境应用环境应用配置 开发—-运维。问题我在我的电脑上可以运行版本更新导致服务不可用对于运维来说考验就十分大 环境配置是十分的麻烦每一个机器都要部署环境集群Redis、ES、Hadoop…费时费力。 发布一个项目jar Redis MySQL jdk ES项目能不能都带上环境安装打包 之前在服务器配置一个应用的环境Redis MySQL jdk ES Hadoop配置超麻烦了不能够跨平台。 Windows开发最后发布到Linux:
传统开发jar运维来做现在开发打包部署上线一套流程做完
java —- apk — 发布应用商店—-张三使用apk—-安装即可用 java —- jar环境—- 打包项目带上环境镜像—-Docker仓库商店—-下载我们发布的镜像—直接运行即可 Docker给以上的问题提出了解决方案 Docker的思想就来自于集装箱 隔离Docker核心思想打包装箱每个箱子是互相隔离的。 本质所有的技术都是因为出现了一些问题我们需要去解决才去学习。
2. Docker的历史
2010年几个搞IT的年轻人就在美国成立了一家公司dotcloud做一些pass的云计算服务 LXC有关的容器技术他们将自己的技术容器化技术命名就是Docker Docker刚刚诞生的时候没有引起行业的注意dotCloud就活不下去 开源开放源代码 2013年Docker开源 Docker越来越多的人发现了docker的优点就火了Docker每个月都会更新一个版本 2014年4月9日Docker1.0发布 Docker为什么这么火十分的轻巧 在容器技术出来之前我们都是使用虚拟机技术 虚拟机在window中装一个Vmware通过这个软件我们可以虚拟出来一台或者多台电脑很笨重 虚拟机也是属于虚拟化技术Docker容器技术也是一种虚拟化技术
vm隔离需要开启多个虚拟机linux centos原生镜像一个电脑需要几个G内存空间开启需要几分钟
docker隔离镜像最核心的环境4m内存十分的小巧运行镜像就可以了小巧几个M或KB的内存空间秒级启动聊聊Doker Docker是基于Go语言开发的开源项目 官网https://www.docker.com/ 文档地址https://docs.docker.com/ Doker镜像仓库地址https://hub.docker.com/
3. Docker能做什么
之前的虚拟机技术 虚拟机技术缺点 1、资源占用十分多 2、冗余步骤多 3、启动很慢 容器化技术 容器化技术不是模拟的一个完整的操作系统 比较Docker和虚拟机技术的不同
传统虚拟机虚拟出一条硬件运行一个完整的操作系统然后在这个系统上安装和运行软件。容器内的应用直接运行在宿主机的内核中容器是没有自己的内核的也没有虚拟我们的硬件所以就轻便了。每个容器间是互相隔离每个容器内都有一个属于自己的文件系统互不影响。
Devops开发、运维 应用更快速的交付和部署 传统一堆帮助文档安装程序! Docker打包镜像发布测试一键运行! 更便捷的升级和扩缩容 使用了Docker之后我们部署应用就和搭积木一样 项目打包为一个镜像扩展服务器A服务器B! 更简单的系统运维 在容器化之后我们的开发测试环境都是高度一致的。 更高效的计算资源利用 Docker是内核级别的虚拟化可以在一个物理机上可以运行很多的容器实例服务器的性能可以被压榨到极致。 只要学不死就往死里学
二、Docker安装
1. Docker的基本组成 镜像image docker镜像就好比是一个模板可以通过这个模板来创建容器服务tomcat镜像runtomcat01容器提供服务器通过这个镜像可以创建多个容器最终服务运行或者项目运行就是在容器中的。 容器container Docker利用容器技术独立运行一个或者一个组应用通过镜像来创建的。 启动停止删除基本命令 目前就可以把这个容器理解为就是一个简易的linux系统 仓库repository 仓库就是存放镜像的地方 仓库分为公有仓库和私有仓库 Docker Hub默认是国外的阿里云.…都有容器服务器配置镜像加速
2. 安装Docker
环境准备
需要会一点点的Linux的基础CentOS7我们使用Xshell连接远程服务器进行操作
环境查看
# 系统内核是 3.10 以上的
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# uname -r
3.10.0-1160.66.1.el7.x86_64# 查看系统版本
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# cat /etc/os-release
NAMECentOS Linux
VERSION7 (Core)
IDcentos
ID_LIKErhel fedora
VERSION_ID7
PRETTY_NAMECentOS Linux 7 (Core)
ANSI_COLOR0;31
CPE_NAMEcpe:/o:centos:centos:7
HOME_URLhttps://www.centos.org/
BUG_REPORT_URLhttps://bugs.centos.org/CENTOS_MANTISBT_PROJECTCentOS-7
CENTOS_MANTISBT_PROJECT_VERSION7
REDHAT_SUPPORT_PRODUCTcentos
REDHAT_SUPPORT_PRODUCT_VERSION7安装 查看文档https://docs.docker.com/ https://docs.docker.com/engine/install/centos/
# 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 \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的。# 安装容器之前更新yum软件包索引。
yum makecache fast
# 4.安装容器相关的。docker-ce社区版docker-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镜像了解卸载docker
# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd# /var/lib/docker docker的默认工作路径3. 阿里云镜像加速
登录阿里云找到容器服务。找到镜像加速地址。配置使用。 四个命令依次执行即可
sudo mkdir -p /etc/docker4. 回顾hello-world流程 5. 底层原理
Docker是怎么工作的 Docker 是一个Client-Server结构的系统Docker的守护进程运行在主机上。通过Socket从客户端访问 DockerServer 接收到Docker-Client的指令就会执行这个命令 Docker为什么比VM快 1、Docker有着比虚拟机更少的抽象层。 2、docker利用的是宿主机的内核vm需要是Guest OS。 所以说新建一个容器的时候docker不需要像虚拟机一样重新加载一个操作系统内核避免引导。 虚拟机是加载GuestOS分钟级别的而docker是利用宿主机的操作系统省略了这个复杂的过程秒级
三、Docker的常用命令
1. 帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息包括镜像和容器的数量
docker 命令 --help # 帮助命令帮助文档的地址https://docs.docker.com/reference/
2. 镜像命令
dokcer images
查看所有本地的主机上的镜像
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 10 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 命令参数可选项-a, --all # 显示所有镜像 (docker images -a)-q, --quiet # 仅显示镜像id (docker images -q)docker search
搜索镜像
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12940 [OK]
mariadb MariaDB Server is a high performing open sou… 4957 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 587 [OK]
percona Percona Server is a fork of the MySQL relati… 582 [OK]
# 解释
# 命令参数可选项 (通过搜索来过滤)
--filterSTARS3000 # 搜索出来的镜像就是stars大于3000的[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker search mysql --filterSTARS3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12941 [OK]
mariadb MariaDB Server is a high performing open sou… 4957 [OK]docker pull
下载镜像
# 下载镜像docker pull 镜像名[:tag]
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker pull mysql
Using default tag: latest # 如果不写tag默认就是latest最新的版本
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载docker image的核心联合文件下载
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址# 两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 联合文件下载已经存在的资源可以共用
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7docker rmi
删除镜像
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker rmi -f 镜像id # 删除指定的镜像
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像空格分隔
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker rmi -f $(docker images -aq) # 删除全部的镜像3. 容器命令
说明我们有了镜像才可以创建容器linux下载一个centos 镜像来测试学习。
docker pull centos新建容器并启动
docker run [可选参数] image
# 参数说明
--namename 容器名字用来区分容器
-d 后台方式运行相当于nohup
-it 使用交互式运行进入容器查看内容
-p 指定容器的端口四种方式小写字母p-p ip:主机端口容器端口-p 主机端口容器端口-p 容器端口容器端口
-P 随机指定端口大写字母P
# 测试启动并进入容器
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker run -it centos /bin/bash
[root526c31d2c298 /]# ls # 查看容器内的centos基础版本很多命令都是不完善的
bin dev etc home lib lib64 lostfound media mnt opt proc root run sbin srv sys tmp usr var# 从容器中退回到主机
[root526c31d2c298 /]# exit
exit
[rootiZbp13qr3mm4ucsjumrlgqZ /]# ls
bin boot dev etc home lib lib64 lostfound media mnt opt proc root run sbin srv sys tmp usr var www列出所有运行的容器
docker ps # 列出当前正在运行的容器
# 命令参数可选项
-a # 列出当前正在运行的容器历史运行过的容器
-n? # 显示最近创建的容器可以指定显示几条比如-n1
-q # 只显示容器的编号[rootiZbp13qr3mm4ucsjumrlgqZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootiZbp13qr3mm4ucsjumrlgqZ /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
526c31d2c298 centos /bin/bash 4 minutes ago Exited (0) 2 minutes ago optimistic_allen
ce0eb11fbf8a feb5d9fea6a5 /hello 4 hours ago Exited (0) 4 hours ago keen_ellis
[rootiZbp13qr3mm4ucsjumrlgqZ /]# docker ps -a -n1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
526c31d2c298 centos /bin/bash 5 minutes ago Exited (0) 3 minutes ago optimistic_allen退出容器
exit # 容器直接停止并退出
ctrlPQ # 容器不停止退出[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker run -it centos /bin/bash
[rootc5d61aa9d7df /]# [rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5d61aa9d7df centos /bin/bash 56 seconds ago Up 55 seconds kind_clarke
[rootiZbp13qr3mm4ucsjumrlgqZ ~]#删除容器
docker rm 容器id # 删除容器不能删除正在运行的容器如果要强制删除docker rm -f 容器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 # 强制停止当前容器4. 常用其他命令
后台启动容器
# 命令docker run -d 镜像名
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker run -d centos
# 问题docker ps发现centos停止了# 常见的坑docker容器使用后台运行就必须要有要一个前台进程docker发现没有应用就会自动停止。
# 比如nginx容器启动后发现自己没有提供服务就会立刻停止就是没有程序了查看日志
docker logs -tf --tail 容器id
# 自己编写一段shell脚本
docker run -d centos /bin/sh -c while true;do echo kuangshen;sleep 1;done[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker logs -tf 容器id
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker logs -tf --tail 10 容器id# 显示日志
-tf # 显示日志
--tail number # 要显示的日志条数查看容器中进程的信息
# 命令 docker top 容器id
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker top 88d23bcbe1f2
UID PID PPID C STIME TTY TIME CMD
root 21212 21193 0 16:23 ? 00:00:00
root 21600 21212 0 16:29 ? 00:00:00查看镜像的元数据
# 命令docker inspect 容器id
[{Id: 88d23bcbe1f28e1f8ae5d2b63fa8d57d2abcbdacf193db05852f4f74a95b9ffe,Created: 2022-07-29T08:23:56.862239223Z,Path: /bin/sh,Args: [-c,while true;do echo kuangshen;sleep 1;done],State: {Status: running,Running: true,Paused: false,Restarting: false,OOMKilled: false,Dead: false,Pid: 21212,ExitCode: 0,Error: ,StartedAt: 2022-07-29T08:23:57.109766809Z,FinishedAt: 0001-01-01T00:00:00Z},Image: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6,ResolvConfPath: /var/lib/docker/containers/88d23bcbe1f28e1f8ae5d2b63fa8d57d2abcbdacf193db05852f4f74a95b9ffe/resolv.conf,HostnamePath: /var/lib/docker/containers/88d23bcbe1f28e1f8ae5d2b63fa8d57d2abcbdacf193db05852f4f74a95b9ffe/hostname,HostsPath: /var/lib/docker/containers/88d23bcbe1f28e1f8ae5d2b63fa8d57d2abcbdacf193db05852f4f74a95b9ffe/hosts,LogPath: /var/lib/docker/containers/88d23bcbe1f28e1f8ae5d2b63fa8d57d2abcbdacf193db05852f4f74a95b9ffe/88d23bcbe1f28e1f8ae5d2b63fa8d57d2abcbdacf193db05852f4f74a95b9ffe-json.log,Name: /silly_lichterman,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/59b088d44f6e67f4ed336de44d19a5784c1a13fa856760bd2b166c4a4d421e2b-init/diff:/var/lib/docker/overlay2/7fc43e24b63e4656ab7e7718d3e4ef5297fe82509452be305a01605a7cdc3b97/diff,MergedDir: /var/lib/docker/overlay2/59b088d44f6e67f4ed336de44d19a5784c1a13fa856760bd2b166c4a4d421e2b/merged,UpperDir: /var/lib/docker/overlay2/59b088d44f6e67f4ed336de44d19a5784c1a13fa856760bd2b166c4a4d421e2b/diff,WorkDir: /var/lib/docker/overlay2/59b088d44f6e67f4ed336de44d19a5784c1a13fa856760bd2b166c4a4d421e2b/work},Name: overlay2},Mounts: [],Config: {Hostname: 88d23bcbe1f2,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,while true;do echo kuangshen;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: bfc28d2ba671adfe5c93325173b93c335d50d8b017eed4fdce2ab75410d6ac2e,HairpinMode: false,LinkLocalIPv6Address: ,LinkLocalIPv6PrefixLen: 0,Ports: {},SandboxKey: /var/run/docker/netns/bfc28d2ba671,SecondaryIPAddresses: null,SecondaryIPv6Addresses: null,EndpointID: ad0252d454e751e2c5ecef24e64c32b0884c53242925bd66e9e5dbf5542af179,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: 7254ffccbdf53e0c72c1d19252980f04fa65153ea3c7ca72af55cfac504cbe3f,EndpointID: ad0252d454e751e2c5ecef24e64c32b0884c53242925bd66e9e5dbf5542af179,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}}}}
]进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的需要进入容器修改一些配置
# 命令
docker exec -it 容器id /bin/bash# 测试
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88d23bcbe1f2 centos /bin/sh -c while t… 13 minutes ago Up 13 minutes silly_lichterman
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it 88d23bcbe1f2 /bin/bash
[root88d23bcbe1f2 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:23 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 841 0 0 08:37 pts/0 00:00:00 /bin/bash
root 858 1 0 08:37 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebangsleep /usr/bin/sleep 1
root 859 841 0 08:37 pts/0 00:00:00 ps -ef# 方式二
docker attach 容器id
# 测试
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker attach 88d23bcbe1f2
正在执行当前的代码...# docker exec # 进入容器后开启一个新的终端可以再里面操作常用
# docker attach # 进入容器正在执行的终端不会启动新的进程。从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机的路径[rootiZbp13qr3mm4ucsjumrlgqZ home]# ll
total 0
[rootiZbp13qr3mm4ucsjumrlgqZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootiZbp13qr3mm4ucsjumrlgqZ home]# docker run -it centos /bin/bash
[root6eda31ad7987 /]# [rootiZbp13qr3mm4ucsjumrlgqZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6eda31ad7987 centos /bin/bash 17 seconds ago Up 16 seconds stoic_kepler
# 进入到容器内部
[rootiZbp13qr3mm4ucsjumrlgqZ home]# docker attach 6eda31ad7987
[root6eda31ad7987 /]# ls
bin dev etc home lib lib64 lostfound media mnt opt proc root run sbin srv sys tmp usr var
[root6eda31ad7987 /]# cd /home/
[root6eda31ad7987 home]# ls
# 在容器的/home路径下创建test.java文件
[root6eda31ad7987 home]# touch test.java
[root6eda31ad7987 home]# ls
test.java
[root6eda31ad7987 home]# exit
exit
[rootiZbp13qr3mm4ucsjumrlgqZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootiZbp13qr3mm4ucsjumrlgqZ home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6eda31ad7987 centos /bin/bash About a minute ago Exited (0) 28 seconds ago stoic_kepler
# 将文件拷贝出来到主机上在主机上执行该命令
[rootiZbp13qr3mm4ucsjumrlgqZ home]# docker cp 6eda31ad7987:/home/test.java /home
[rootiZbp13qr3mm4ucsjumrlgqZ home]# ls
test.java# 拷贝是一个手动过程未来我们使用 -v 卷的技术可以实现自动同步容器内的/home路径和主机上的/home路径打通5. 小结 6. 作业练习
docker安装nginx
搜索镜像docker search nginx (建议去dockerHub上去搜索)下载镜像docker pull nginx启动nginx本机测试
# -d 后台运行# --namenginx01 给容器命名# -p 宿主机端口:容器内部端口[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker run -d --namenginx-1 -p 3344:80 nginx6e02190a50bc8d79653ffa88f6b5c143d79c5ac3257d5d5ed6a01247980fb48a[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6e02190a50bc nginx /docker-entrypoint.… 18 seconds ago Up 17 seconds 0.0.0.0:3344-80/tcp, :::3344-80/tcp nginx-1# 进入容器[rootiZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it a1e130aa184d /bin/bashroota1e130aa184d:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroota1e130aa184d:/# cd /etc/nginx/roota1e130aa184d:/etc/nginx# lsconf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params[rootiZbp13qr3mm4ucsjumrlgqZ ~]# curl localhost:3344!DOCTYPE htmlhtmlheadtitleWelcome to nginx!/titlestylehtml { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }/style/headbodyh1Welcome to nginx!/h1pIf you see this page, the nginx web server is successfully installed andworking. Further configuration is required./ppFor online documentation and support please refer toa hrefhttp://nginx.org/nginx.org/a.br/Commercial support is available ata hrefhttp://nginx.com/nginx.com/a./ppemThank you for using nginx./em/p/body/html端口暴露的概念 思考问题我们每次改动nginx配置文件都需要进入容器内部十分的麻烦我要是可以在容器外部提供一个映射路径达到在容器外修改文件名容器内部就可以自动修改-v 数据卷
docker安装tomcat
# 官方的使用
docker run -it --rm tomcat# 我们之前的启动都是后台停止了容器之后容器还是可以查到docker run -it --rm一般用来测试用完就删除。# 下载
docker pull tomcat# 启动运行
docker run -d --nametomcat01 -p 3355:8080 tomcat# 测试访问没有问题但是找不到资源
# 进入容器有一个webapps文件夹和webapps.dist文件夹
docker exec -it tomcat01 /bin/bash
# webapps文件夹下没有资源资源都在webapp.dist文件夹下
root35eb825661e0:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work# 发现问题阿里云镜像的原因默认是最小的镜像所有不必要的都剔除掉保证最小可运行的环境
# 1、Linux命令少了。
# 2、没有webapps文件夹。# 没有webapps文件夹发现有一个webapps.dist文件夹资源在webapps.dist文件夹下
# 把webapps.dist文件夹下的文件复制到webapps文件夹下就可以访问成功。
root35eb825661e0:/usr/local/tomcat# cp -r webapps.dist/* webapps思考问题我们以后要部署项目如果每次都要进入容器是不是十分麻烦我要是可以在容器外部提供一个映射路径webapps我们在外部放置项目就自动同步到内部就好了
部署ESkibana
# es暴露的端口很多
# es十分的耗内存
# es的数据一般需要放置到安全目录挂载# 下载启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e discovery.typesingle-node elasticsearch:7.6.2# 启动了linux就卡住了es是十分耗内存的1核2G
# 查看cpu的状态
docker stats
# 测试一下es是成功的
[rootiZbp13qr3mm4ucsjumrlgqZ ~]# curl localhost:9200
{name : 7ed338b2a87c,cluster_name : docker-cluster,cluster_uuid : enAVpI1oQoW4tLmafuWcnw,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
}
# 赶紧关闭增加内存的限制修改配置文件-e环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e discovery.typesingle-node -e ES_JAVA_OPTS-Xms64m -Xmx512m elasticsearch:7.6.2
# 可以访问成功查看cpu状态作业使用kibana连接es思考网络如何才能连接过去
7. 可视化
portainer先用这个
docker run -d -p 8088:9000 --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainerRancherCI/CD时再用这个
什么是portainer ?
Docker图形化界面管理工具提供一个后台面板供我们操作
# 启动运行
docker run -d -p 8088:9000 --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer访问测试http://ip:8088 选择本地的Local 进入之后的面板 r镜像