Docker笔记一
学习视频看的是up主:遇见狂神说
想要学习运维,学习CI/CD,那就离不开Docker。
一、从0开始安装Docker
系统:CentOS7
yum设置阿里云源,yum源更新:(这一步如果跳过,后面启动Docker会报错)
# 备份
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum update
安装Docker:
# 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装工具包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 设置阿里云仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装社区版
yum install docker-ce docker-ce-cli containerd.io
查看是否安装成功:
# 启动Docker
systemctl start docker
# 运行hello world
# docker run命令会先查找是否存在这个镜像,如果不存在会去仓库上拉取
# 再从这个镜像中创建一个容器,这个容器运行一个可执行文件,可执行文件可以产生你当前看到的输出
docker run hello-world
二、卸载Docker(不想学了再卸载)
yum remove docker-ce
rm -rf /var/lib/docker
三、Docker介绍
3.1、Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
- 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
- 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
- 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
- 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
3.2、Docker架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。(先有镜像才能有容器)
四、Docker常用命令
4.1、系统命令
# 下面两个命令,当docker没有启动时,会提示Is the docker daemon running?
docker version
docker info
# 这个命令docker没有启动时也能正常执行
docker 任何命令 --help
# 启动/重启命令
systemctl start docker
systemctl restart docker
# 关闭命令(两个都要执行,才算完全关闭)
systemctl stop docker.socket
systemctl stop docker
# 设置开机自启动
systemctl enable docker
docker info提示有两个stopped的容器,有一个镜像。
查看镜像:
查看容器:(执行了两次docker run hello-world,所以有两个容器)
再执行一次docker run hello-world,查看容器变成了三个:
NAMES那一列是容器的名字。由于我们没有通过–name指定容器的名字,所以由docker自动分配一个随机名称。
4.2、镜像的基本命令
1、docker images(列出所有镜像)
-q(只列出镜像ID,常和其他命令结合使用)
[root@centos etc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
[root@centos etc]# docker images -q
d1165f221234
2、docker inspect(查看指定镜像的详细信息)
可以根据ID或者name指定镜像
发现hello-world的ID其实很长,之前看到的是它的前12位。
[root@centos etc]# docker inspect hello-world
[
{
"Id": "sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726",
"RepoTags": [
"hello-world:latest"
],
"RepoDigests": [
"hello-world@sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e"
],
"Parent": "",
"Comment": "",
"Created": "2021-03-05T23:25:25.230064203Z",
"Container": "f5a78ef54769bb8490754e9e063a89f90cc8eee6a6c5a0a72655826e99df116e",
"ContainerConfig": {
"Hostname": "f5a78ef54769",
"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",
"#(nop) ",
"CMD [\"/hello\"]"
],
"Image": "sha256:77fe0a37fa6ce641a004815f2761a9042618557d253f312cd3da61780e372c8f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"DockerVersion": "19.03.12",
"Author": "",
"Config": {
"Hostname": "",
"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": [
"/hello"
],
"Image": "sha256:77fe0a37fa6ce641a004815f2761a9042618557d253f312cd3da61780e372c8f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 13336,
"VirtualSize": 13336,
"GraphDriver": {
"Data": {
"DeviceId": "2",
"DeviceName": "docker-253:0-830847-5288b08f09b28bc498a92d8b97f01571cc8054930a06a5302dddc88221929474",
"DeviceSize": "10737418240"
},
"Name": "devicemapper"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:f22b99068db93900abe17f7f5e09ec775c2826ecfe9db961fea68293744144bd"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
3、docker search(搜索镜像)
只显示STARS大于等于3000的镜像:
4、docker pull(下载镜像)
[root@centos etc]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
b4d181a07f80: Pull complete
a462b60610f5: Pull complete
578fafb77ab8: Pull complete
524046006037: Pull complete
d0cbe54c8855: Pull complete
aa18e05cc46d: Pull complete
32ca814c833f: Pull complete
9ecc8abdb7f5: Pull complete
ad042b682e0f: Pull complete
71d327c6bb78: Pull complete
165d1d10a3fa: Pull complete
2f40c47d0626: Pull complete
Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
docker镜像的结构是分层的,每一层(layer)都有自己的ID,比如上面的mysql最新版有12层。
镜像之间有时会共享一部分layer,比如我们再拉一个mysql其他版本的:
[root@centos etc]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b4d181a07f80: Already exists
a462b60610f5: Already exists
578fafb77ab8: Already exists
524046006037: Already exists
d0cbe54c8855: Already exists
aa18e05cc46d: Already exists
32ca814c833f: Already exists
52645b4af634: Pull complete
bca6a5b14385: Pull complete
309f36297c75: Pull complete
7d75cacde0f8: Pull complete
Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
可以看到前7个layer已经存在,是和之前的mysql最新版共享的,此时只需要下载其他layer,减少了存储空间的消耗。
5、docker rmi -f(删除镜像)
可以根据镜像ID或者name进行删除,多个ID/name用空格隔开:(这里删除mysql,默认删除了最新版)
[root@centos etc]# docker rmi -f mysql
Untagged: mysql:latest
Untagged: mysql@sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b
Deleted: sha256:5c62e459e087e3bd3d963092b58e50ae2af881076b43c29e38e2b5db253e0287
Deleted: sha256:b92a81bddd621ceee73e48583ed5c4f0d34392a5c60adf37c0d7acc98177e414
Deleted: sha256:265829a9fa8318ae1224f46ab7bc0a10d12ebb90d5f65d71701567f014685a9e
Deleted: sha256:2b9144b43d615572cb4a8fb486dfad0f78d1748241e49adab91f6072183644e9
Deleted: sha256:944ffc10a452573e587652116c3217cf571a32c45a031b79fed518524c21fd4f
Deleted: sha256:b9108f19e3abf550470778a9d91959ce812731d3268d7224e328b0f7d8a73d26
[root@centos etc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 09361feeb475 3 weeks ago 447MB
hello-world latest d1165f221234 4 months ago 13.3kB
猜测一下,此时再删除mysql,会发生什么,提示不存在latest可以删除,还是删除 5.7?
[root@centos etc]# docker rmi -f mysql
Error: No such image: mysql
# 结果是提示不存在
结合其他命令删除所有镜像:docker rmi -f $(docker images -q)
[root@centos etc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 09361feeb475 3 weeks ago 447MB
hello-world latest d1165f221234 4 months ago 13.3kB
[root@centos etc]# docker rmi -f $(docker images -q)
Untagged: mysql:5.7
Untagged: mysql@sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
Deleted: sha256:09361feeb4753ac9da80ead4d46e2b21247712c13c9ee3f1e5d55630c64c544f
Deleted: sha256:e454d1e47d2f346e0b2365c612cb6f12476ac4a3568ad5f62d96aa15bccf3e19
Deleted: sha256:e0457c6e331916c8ac6838ef4b22a6f62b21698facf4e143aa4b3863f08cf7d2
Deleted: sha256:ed73046ee2cd915c08ed37a545e1b89da70dc9bafeacfbd9fddff8f967373941
Deleted: sha256:419d7a76abf4ca51b81821da16a6c8ca6b59d02a0f95598a2605a1ed77c012eb
Deleted: sha256:9aecb80117a5517daf84c1743af298351a08e48fa04b8e99dcb63c817326a748
Deleted: sha256:d8773288899b1230986eba7486009df11d5dd6c628b1d4fd0443e873c6b00f70
Deleted: sha256:45a0a6bb39a4d7b37a6c598ae6af47f8a36ef63eaa9ef92d565137156aa36f54
Deleted: sha256:341f6b75346e72e9fa503aeb5362d1fe4f00449e02d3320e5c68f3052b7c2c13
Deleted: sha256:023f47f19f876ffa0225502a85b30954a44e54dc8223329fec32b336315c75c3
Deleted: sha256:058c443dffe18a5d2aad04cd5451a8540c7272ce9f8515d27e815303b1c25b59
Deleted: sha256:764055ebc9a7a290b64d17cf9ea550f1099c202d83795aa967428ebdf335c9f7
Untagged: hello-world:latest
Untagged: hello-world@sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726
[root@centos etc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
4.3、容器的基本命令
有了镜像才可以创建容器,所以需要先下载镜像,这里我们下载一个centos镜像进行容器命令的学习:
docker pull centos
1、docker run(运行容器)
–name 指定容器name
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口(主机端口:容器端口)
启动并进入容器:(退出直接exit)
[root@centos etc]# docker run -it centos /bin/bash
[root@cf3553fefbf8 /]#
cf3553fefbf8这串数字是啥,可能是容器的ID,我们验证一下:
2、docker attach(进入一个正在运行的容器)
这里测试一下进入一个已经停止的容器:
3、显示所有容器
docker container ls -a
docker ps -a
(常用)
两者功能没有什么区别,去掉-a显示正在运行的容器
-q 只显示容器ID,常和其他命令结合使用
4、退出容器
exit(容器停止并退出)
Ctrl + p + q(容器不停止并退出)
试一下第二个:
[root@centos etc]# docker run -it centos /bin/bash
[root@6596a80dfa88 /]# [root@centos etc]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6596a80dfa88 centos "/bin/bash" 28 seconds ago Up 26 seconds naughty_noether
[root@centos etc]#
5、docker rm -f(删除容器)
这里结合docker ps -aq删除全部容器:
[root@centos etc]# docker rm -f $(docker ps -aq)
6596a80dfa88
cf3553fefbf8
bf8019552150
66910d933305
0e57e2a8a837
0894e2928305
66a88cf2fd66
0090666370e4
ed96885b977b
试着不用-f删除一个正在运行的容器:(提示不能删除一个正在运行的容器)
[root@centos etc]# docker run -it centos /bin/bash
[root@4ffc0a7d693b /]# [root@centos etc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ffc0a7d693b centos "/bin/bash" 16 seconds ago Up 14 seconds nice_johnson
[root@centos etc]# docker rm 4ffc0a7d693b
Error response from daemon: You cannot remove a running container 4ffc0a7d693b96d6f7dce9470b6c686774326b28e009b1300197560082ae5fd9. Stop the container before attempting removal or force remove
加上-f就可以删除。
6、docker start(启动一个容器)
7、docker restart(重启一个容器)
8、docker stop(暂停一个正在运行的容器,类似于exit)
9、docker kill(杀掉一个正在运行的容器,当stop报错时再用kill)
五、Docker镜像分层结构理解
5.1、什么是docker 镜像
就是把业务代码,可运行环境进行整体的打包。
5.2、如何创建docker镜像
现在docker官方共有仓库里面有大量的镜像,所以最基础的镜像,我们可以在公有仓库直接拉取,因为这些镜像都是原厂维护,可以得到即使的更新和修护。
Dockerfile:
我们如果想去定制这些镜像,我们可以去编写Dockerfile,然后重新bulid,最后把它打包成一个镜像,这种方式是最为推荐的方式包括我们以后去企业当中去实践应用的时候也是推荐这种方式。
5.3、镜像的分层技术
我们先来看一个Ubuntu系统的镜像。
我们可以镜像可以分层很多个layer,并且他们都有大小和ID,我们可以看到这里有4个layer ID号,最终这个镜像是由他们layer组合而成,并且这个镜像它是只读的,它不能往里面写数据,如果想写数据怎么办呢?我们会在镜像上启一层contain layer,其实就是相当于把镜像启动成一个容器,那么在容器这一层,我们是可写的。
六、Docker进阶命令
6.1、docker run -d(后台启动容器)
使用后台运行的前提是,容器存在一个正在运行的进程。
如果不存在,使用后台运行是不起作用的,docker会直接关掉容器。
比如我们让容器运行一个shell脚本,死循环执行输出:
[root@centos ~]# docker run -d centos /bin/sh -c "while true;do echo helloworld;sleep 1;done"
72312d5c0ef0a2190290b4c4841f46401af09bb0791b488e2dcc3fe49fab80e8
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72312d5c0ef0 centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds dazzling_lichterman
6.2、docker logs(查看容器日志)
[root@centos ~]# docker logs 72312d5c0ef0
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
6.3、docker top(查看容器的进程信息)
[root@centos ~]# docker top 72312d5c0ef0
UID PID PPID C STIME TTY TIME CMD
root 116399 116378 0 17:25 ? 00:00:00 /bin/sh -c while true;do echo helloworld;sleep 1;done
root 116926 116399 0 17:29 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
6.4、docker exec(进入一个正在运行的容器)
docker exec -it ID /bin/bash
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72312d5c0ef0 centos "/bin/sh -c 'while t…" 16 hours ago Up 16 hours dazzling_lichterman
[root@centos ~]# docker exec -it 72312d5c0ef0 /bin/bash
[root@72312d5c0ef0 /]#
再执行一次docker attach看看有什么区别:
[root@centos ~]# docker attach 72312d5c0ef0
helloworld
helloworld
helloworld
helloworld
docker exec类似于打开新的终端,docker attach进入正在运行的终端。
6.5、docker cp(从容器拷贝文件到主机上,或者从主机拷贝文件到容器)
[root@centos ~]# docker cp --help
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
在主机新建一个文件:sample.java,然后拷贝到容器中:
[root@centos ~]# touch sample.java
[root@centos ~]# docker cp sample.java 72312d5c0ef0:/
[root@centos ~]# docker exec -it 72312d5c0ef0 /bin/bash
[root@72312d5c0ef0 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sample.java sbin srv sys tmp usr var
docker cp是一个手动拷贝,后期会使用docker -v 卷的技术进行同步。
七、Docker部署
7.1、Nginx
docker pull nginx
#运行容器
docker run -d --name nginx_test -p 3344:80 nginx
查看本机的3344端口:
[root@centos ~]# curl localhost:3344
curl: (56) Recv failure: Connection reset by peer
我的解决方案:
# 关闭防火墙firewalld
# 暂时关闭
systemctl stop firewalld
# 永久关闭,重启centos后才能生效
systemctl disable firewalld
# 查看防火墙状态,显示not running就行
firewall-cmd --state
# 安装iptables
yum install iptables
yum install iptables-services
# 启动、设置开机自启动
systemctl start iptables
systemctl enable iptables.service
# 编辑防火墙文件,添加一行代码(开放3344端口)
vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3344 -j ACCEPT
# 重启iptables
systemctl restart iptables
然后重启CentOS,重启Docker,重新运行容器。再次查看3344端口:
[root@centos ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
使用浏览器访问:
如果要修改nginx的配置文件,就必须进入容器,那么可不可以在主机进行修改,同步到容器,实现容器的自动修改呢?也就是使用之前提到过的docker -v 卷的技术,后面再具体讲。
7.2、Tomcat
docker pull tomcat
# 运行容器
docker run -d --name tomcat_test -p 3355:8080 tomcat
此时已经能访问,但是我们想看的不是这样一个页面。
这是因为阿里云镜像给我们下载的是一个不完整的镜像,剔除了不必要的东西。
进入容器发现webapps文件夹里边没有东西:
[root@centos ~]# docker exec -it tomcat_test /bin/bash
root@25518e91b2db:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@25518e91b2db:/usr/local/tomcat# cd webapps
root@25518e91b2db:/usr/local/tomcat/webapps# ls
root@25518e91b2db:/usr/local/tomcat/webapps#
把webapps.dist里面的文件复制到webapps:
root@25518e91b2db:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@25518e91b2db:/usr/local/tomcat# cd webapps
root@25518e91b2db:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
再次访问:
7.3、ES和Kibana(ES的可视化工具)
Nginx和Tomcat都是只暴露一个端口,ES暴露的端口比较多。
docker pull elasticsearch:7.6.2
# 运行之前stop其他容器(因为ES消耗很多内存)
docker stop $(docker ps -q)
# 运行ES(执行完这条命令之后,终端会变得很卡,因为我给虚拟机只分配了2G内存)
# 不知道为什么这条命令执行后大概过一分钟容器就自动停掉了(后面有解决方案)
docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch:7.6.2
# 运行Kibana(和ES版本一致)
docker run --link elasticsearch:elasticsearch -p 5601:5601 -d kibana:7.6.2
使用docker stats
查看内存使用情况:
[root@centos ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b7cfa47e7f8d elasticsearch 0.08% 964.9MiB / 1.777GiB 53.04% 656B / 0B 718MB / 0B 18
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b7cfa47e7f8d elasticsearch 0.08% 964.9MiB / 1.777GiB 53.04% 656B / 0B 718MB / 0B 18
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b7cfa47e7f8d elasticsearch 39.01% 961.1MiB / 1.777GiB 52.83% 656B / 0B 736MB / 0B 18
解决ES自动停止的问题:
# 用这个命令运行(限制内存)
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.6.2
查看ES是否启动成功:
查看Kibana是否启动成功:
八、Docker可视化
先使用portainer(Docker图形化界面管理工具,轻量级的),后面再用Rancher。
docker run -d -p 9000:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
这样就运行成功,接下来是使用。
先登录进去,是这样的:
选择Local,连接本地的容器:
点击connect:
然后自己随便探索一下。(平时可以不用这个可视化工具,用命令就行)