我的世界docker怎么装mod
安装docker
环境centeros7
#1 卸载之前的docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine #2 配置国内镜像地址 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #3 安装 sudo yum install docker-ce docker-ce-cli containerd.io #4 启动docker sudo systemctl start docker #5 测试 sudo docker run hello-worldubuntu
# 卸载老版本(之前没装过也要执行这个) sudo apt-get remove docker docker-engine containerd runc # 安装必要的工具 sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common # 安装GPG证书 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 设置源为阿里源 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" #安装docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io sudo apt-get install docker-ce=5:19.03.12~3-0~ubuntu-focal docker-ce-cli=5:19.03.12~3-0~ubuntu-focal containerd.io # 测试 docker version # 配置国内镜像 新建并编辑这个文件 vi /etc/docker/daemon.json { "registry-mirrors": ["https://"] } systemctl daemon-reload //载入daemon.json systemctl restart docker //重启docker基本操作
运行ubuntu
docker run -it ubuntu bash查看安装的image
docker images #查看docker下载的镜像 docker images -aq #列出安装的所有镜像的id docker info #查看docker的信息搜索容器
https:/// #在这个网站上搜索想要安装的项目 docker search mysql #使用命令搜索 docker search flink docker pull mysql #下载最新的mysql docker pull mysql:5.7 #指定版本下载,指定的版本一定要官方存在的,可以再docker hub里查看删除镜像
docker rmi -f mysql:5.7 # -f是强制删除 docker rmi -f $(docker images -aq) #传一个表达式,删除所有的镜像下载一个容器
docker pull ubuntu启动容器
docker run [] imageid #参数说明 --name="tomcat01" 容器名字 启动两个tomcat用来区分 -d 后台运行的方式 -it 使用交互方式运行,进入容器查看内容。比如启动ubuntu 窗口命令及时ubuntu了 -p 指定容器的端口 -p ip:主机端口:容器端口 -p 主机端口:容器端口 -p 容器端口退出容器
exit 退出容器 ctrl+p+q 退出不关闭容器列出所有正在运行容器
docker ps删除容器
docker rm -f imageid C:\Users\Administrator>docker rm nginx001 upbeat_bhabha upbeat_bhabha #windos删除所有的容器,用空格隔开容器名 docker ps -a -q|xargs docker rm -f #linux命令删除所有的容器 docker rm -f $(docker ps -a -q)后台启动
docker run -d ubuntu #后台运行 但是启动后由于没有前台就会停止服务查看日志
docker logs -ft --tail 10 imageid查看容器内部进程
C:\Users\Administrator>docker top 6941ce2112b9 PID USER TIME COMMAND 4733 root 0:00 /bin/bash进入后台运行的容器
#后台正在运行的容器,重新进入命令。 C:\Users\Administrator>docker exec -it 6941ce2112b9 bin/bash root@6941ce2112b9:/# ll复制文件
#创建文件后,即使停止ubuntu也可以复制文件 1. 在ubuntu中创建一个a.txt 2. 停止ubuntu 3. docker cp imageid:/home/a.txt D:\安装软件
ngnx
#1 先在docker hub 上搜索nginx,找到自己想要拉取的版本号 #2 拉取 docker pull nginx:1.18.0-alpine #3 启动(指定端口) docker run -d --name nginx001 -p 7777:80 nginx:1.18.0-alpine #4 测试 http://localhost:7777/ #进入nginx docker exec -it nginx02 /bin/sh #windows下的命令 docker exec -it nginx02 /bin/bash #linux下的命令 #配置文件 /etc/nginx问题
每次修改配置文件还要进入容器内部修改,可以在外部提供一个映射路径。在外面修改内部就可以自动同步。
tomcat
#加上--rm是用完就会删除 docker run -it --rm tomcat:9.0es+kibana
安装ES
# --net somenetwork #开启 $ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 #查看cpu使用状态 docker stats #特别消耗内存,增加内存限制 $ docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx521m" elasticsearch:7.6.2安装kibana
思考:各个容器之间是相互隔离的,那么kibana是怎么连接es呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ooBVSmF-1594259689531)(C:\Users\Administrator\Desktop\面试18k宝典\markdown图片\1594199303140.png)]
可视化
- portainer
- rancher
一些原理
[root@VM_0_12_centos docker]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 8559a31e96f4: Pull complete 8d69e59170f7: Pull complete 3f9f1ec1d262: Pull complete d1f5ff4f210d: Pull complete 1e22bfa8652e: Pull complete Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133 Status: Downloaded newer image for nginx:latest /library/nginx:latest #可以看到当我们拉取镜像的时候,是会拉取一个文件列表。这就是docker的unionFS,联合文件系统。docker镜像原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是unionFS。 一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 # bootfs(boot file system) 主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel, Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。 这一层与我们典型的Linux/Unix系统是一样的,包含boot加載器和内核。 当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。 #rootfs(root file system) 在 bootfs之上。包含的就是典型 Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等docker资源共享
比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。容器数据卷
使用命令添加数据卷
#使用这个命令实现宿主机和容器文件夹共享。相当于在宿主机和容器之间插了一根数据线 docker run -it -v /宿主机绝对路径目录:/容器目录 imageid docker run -it -v /opt/data:/shareData ubuntu docker run -it -v /opt/data:/shareData:ro ubuntu #read only root@103cf47f2267:/shareData# echo "hehe" >> a.txt bash: a.txt: Read-only file system #docker inspect imageid 查看容器相关的信息 "HostConfig": { "Binds": [ "/opt/data:/shareData:ro" ], "Mounts": [ { "Type": "bind", "Source": "/opt/data", "Destination": "/shareData", "Mode": "ro", "RW": false, "Propagation": "rprivate" } ],使用dockerFile添加容器卷
#1 创建一个文件 touch DockerFile #2 编写dockerFile FROM centos VOLUME ["/shareData1","/shareData2"] CMD echo "finished,-----------success" CMD /bin/bash #3 构建成新镜像 注意:最后面有一个点 docker build -f /opt/DockerFile -t otis/centos . 构建命令大全 https://www.runoob.com/docker/docker-build-command.html #4 测试 docker run -it otis/centos 在根目录查看生成了两个文件 /shareData1 /shareData2 可以通过docker inspect imageid 命令来查看宿主机对应的地址 "Mounts": [ { "Type": "volume", "Name": "8f11c86d26cdeeef49b17924f9204fa0c084905590bbfb83de30dd9197fbf04b", "Source": "/var/lib/docker/volumes/8f11c86d26cdeeef49b17924f9204fa0c084905590bbfb83de30dd9197fbf04b/_data", "Destination": "/shareData1", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "fe242d7f81064eab290e2e372950c327bc0059366d2dc2435499021768a8a736", "Source": "/var/lib/docker/volumes/fe242d7f81064eab290e2e372950c327bc0059366d2dc2435499021768a8a736/_data", "Destination": "/shareData2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],数据卷容器
# 启动一个容器 docker run -it --name dc01 otis/centos # 启动第二个容器 docker run -it --name dc02 --volumes-from dc01 otis/centos #这样相当于dc02继承dc01,但是在dc02中的操作,在dc01中也可以查看一些测试
#现在又启动一个dc03容器,也是继承dc01 现在删除dc01,在dc02上新建文件,在dc03上也是可以查看到。DockerFile
简介
# 定义 就是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。 # 构建的步骤 编写dockerFile docker build docker run解析过程
1. 每条保留自指令都必须为大写字母,且后面要跟随至少一个参数 2. 指令从上到下,顺序执行 3. #表示注释 4. 每条指令都会创建一个新的镜像层,并对镜像进行提交命令
# FROM 基础镜像,当前新景祥是基于哪个镜像的 # MAINTAINER 镜像作者和邮箱 # RUN 容器构建时需要运行的命令,比如到第几行输出以下“======finish======” # EXPOSE 暴露端口 比如redis EXPOSE 6379 # WORKDIR 指定进入软件后,默认的工作目录。 比如 /opt/module/ # ENV 设置工作变量 # ADD(和copy差不多,但是会自动解压) 添加一个 xxx.tar.xz 并解压 # COPY 将文件复制到镜像中 # CMD 指定一个容器启动时要运行的命令 dockerFile 中可以指定多个CMD命令,但是只有最后一个生效,CMD会被docker run之后的参数替换 # ENTRYPOINT 指定一个容器启动时要运行的命令 和CMD的目的一样,都是在指定容器启动程序及参数 # ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild触发案例
base镜像(scratch)
docker hub基本上所有的软件都是通过在base镜像中安装和配置需要的软件构建出来的
自定义镜像
现在pull的ubuntu是不支持vim 命令和 ifconfig命令,通过编写dockerfile,使其支持。
FROM centos # 设置环境变量 ENV mypath /tmp # 设置启动默认路径 WORKDIR $mypath # 安装vim和net-tools工具 RUN yum -y install vim RUN yum -y install net-tools #暴露端口80 EXPOSE 80 CMD /bin/bash #build docker build -f Dockerfile -t myucentos:0.1 . 最后出现: Successfully built 89fff055a561 Successfully tagged myucentos:0.1 #测试 启动后发现可以使用vim和ifconfig命令了 #镜像编辑历史 docker history imageid自定义dockerfile 定制tomcat