江苏省建设局网站证件查询,wordpress文章改背景色,个人网站可以做论坛么,怎样自己开网站赚钱本文由个人总结#xff0c;如需转载使用请标明原著及原文地址
这里是基于我前一篇搭的centos8服务器做的#xff0c;如果yum baseos源或appstream源有问题可以去看看前一篇
https://blog.csdn.net/qq_36911145/article/details/129263830
1.安装docker
1.1配置docker yum…本文由个人总结如需转载使用请标明原著及原文地址
这里是基于我前一篇搭的centos8服务器做的如果yum baseos源或appstream源有问题可以去看看前一篇
https://blog.csdn.net/qq_36911145/article/details/129263830
1.安装docker
1.1配置docker yum源
在 /etc/yum.repos.d目录下创建docker.repo文件并写入阿里的docker源
cd /etc/yum.repos.d
vi docker.repo
docker.repo文件里写入的内容这里我用的是8.0版本的所以就用这个地址不同版本可以到https://mirrors.aliyun.com/docker-ce/linux/centos找自己的版本这个配置有一定的通用性其实不用很精确的匹配
[docker]
namedocker-ce
baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/8.0/x86_64/stable/
gpgcheck0
enabled1
1.2安装docker
yum install docker-ce
输入y继续安装 安装完成后可以用docker -v 命令查看 1.3启动docker
systemctl start docker
1.4设置docker开机自启
systemctl enable --now docker 重启服务器验证docker开机自启是否生效
systemctl status docker 1.5配置docker国内镜像源可不配
创建或修改daemon.json文件
vi /etc/docker/daemon.json
可配置多个我这提供的1.网易 2.中国科技大学 3.docker中国区官方镜像
{registry-mirrors: [http://hub-mirror.c.163.com,https://docker.mirrors.ustc.edu.cn,https://registry.docker-cn.com]
}
然后重启docker服务用docker info查看
systemctl restart docker
docker info 2.docker容器使用
2.1查找docker镜像
https://hub.docker.com/
在搜索框内输入你要查找的镜像我这要跑个简单的java项目所以搜java的 2.2下载镜像
找到需要的镜像后复制指令在服务器上输入就能下载到对应的镜像
docker pull java:openjdk-8u111-jre-alpine
alpine是linux一个极简的系统比centos小了不是一点两点所以我特意去找了个alpine系统的jdk镜像来用和网上常用的java:8镜像对比这四舍五入差了一个亿 2.3简单docker容器的创建及启动报错解决
2.3.1 docker run命令
这是正常运行和解决问题的步骤不想走弯路就按2.3.2-2.3.3-2.3.1的顺序看但我觉得学习解决问题的思路更重要点
创建并运行容器用到docker run命令下面是常用的一些参数
-i以交互模式运行容器通常与 -t 同时使用-t启动容器后为容器分配一个命令行通常与 -i 同时使用-d守护进程后台运行该容器--name给容器命名2个“-”-p端口映射 -p 宿主机端口:容器端口对其他参数感兴趣可以看这https://blog.csdn.net/qq_45547688/article/details/125785419
docker run -itd --name demo1 -p 8091:8091 java:openjdk-8u111-jre-alpine /bin/sh
格式是docker run 参数 使用的镜像 执行的命令
我这用的是alpine系统所以执行的是/bin/sh如果是centos的镜像应该是/bin/bash
2.3.2 runc报错
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby/ad47b82ed6d9d6daafb5b079694c2bc5af0fd0f4607711a0b28eb52c3d8cbf0f/log.json: no such file or directory): runc did not terminate successfully: exit status 127: runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
: unknown.
这时报错了大致意思就是runc出问题了那我们就来看下runc输入runc或者runc -v回车
runc
这时报了这个错通过网上查找原因是没有安装libseccomp-devel
runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
2.3.3安装libseccomp-devel
yum install libseccomp-devel
一般装完libseccomp-devel就行了我另一台服务器装libseccomp-devel报了另一个错说libseccomp版本太低导致libseccomp-devel不能装最新的那么就给他更新下
如果libseccomp-devel能正常安装就不用执行这个了
yum update libseccomp 安装完libseccomp-devel用runc -v查看runc的状态
然后用最开始的docker run指令创建并运行容器
docker ps可以查看当前启动的容器docker ps -a可以查看所有容器包括新创建和未启动的那些 2.4docker容器的简单使用
docker start 容器名启动docker容器docker stop 容器名停止docker容器docker restart 容器名重启docker容器docker exec -it 容器名 执行命令进入到docker容器内
前三个没啥好说的第四个举个栗子如下-i 展示容器输入信息STDIN-t 命令行交互模式alpine执行/bin/shcentos执行/bin/bash
docker exec -it demo1 /bin/sh
这个样子就是进到容器内部了docker容器就是个服务器你在你宿主机上能做的事里面都能做 玩腻了想出来就输入exit出来
exit
3.运行java文件
3.1使用dockerfile运行java文件
3.1.1创建dockerfile
首先创建个文件夹并进入用cp命令将要运行的jar包复制过来
接着用vi创建dockerfile文件并写入内容
mkdir /usr/local/docker-tmp2
cd /usr/local/docker-tmp2
cp /usr/local/docker-tmp/demo1.jar /usr/local/docker-tmp2/demo1.jar
vi demo2.dockerfile
dockerfile里的内容
# 使用的基础镜像
FROM java:openjdk-8u111-jre-alpine
# 将java文件拷进docker容器第一个路径是宿主机路径第二个是docker容器内路径文件最好放在dockerfile同级或子级路径
ADD demo1.jar /usr/local/demo1.jar
# 开放的端口
EXPOSE 8091
# 容器运行后执行的命令这里用CMD也行
ENTRYPOINT [java,-jar,/usr/local/demo1.jar]
3.1.2通过dockerfile创建docker镜像
写好dockerfile文件后用docker build创建docker镜像
-f 指定用于生成镜像的dockerfile文件
-t 给新创建的镜像命名可以直接是名字或者加冒号冒号后加版本号
最后的空格和点“ .”一定要加dockerfile构建镜像时是以docker引擎中展开的构建上下文中的文件最后的点是指定镜像构建过程中的上下文环境为当前目录像demo1.jar指的就是当前目录下的demo1.jar
docker build -f demo2.dockerfile -t java-project:1.0 . 3.1.3通过docker镜像创建容器
docker run -itd --name demo3 -p 8091:8091 java-project:1.0 /bin/sh
我的java项目用的是8091端口这里将容器的8091端口映射到宿主机的8091端口上了这时就可以通过访问宿主机的8091端口的方式来访问java项目了
访问不到可能是宿主机端口没开自己开下 3.2麻烦的集聚各种冷门知识的运行java项目方法
这个是我用2.4的方法创建容器后想怎么用现有容器改造成自启java的容器研究了很多东西得出来的方法虽然能用但是没必要但是学到了很多docker的知识倒是真的憨实基础有用只是为了运行java没必要
3.2.1将jar包拷到容器内
继续用2.4创建的容器来运行java
首先把jar包拷进去
方法一用docker cp命令
docker cp 宿主机文件路径 docker容器名:docker容器路径
如果容器内的目录不存在要先进去创建目录
docker exec -it demo1 /bin/sh
mkdir /usr/local/web
exit
docker cp /usr/local/web/demo1.jar demo1:/usr/local/web/demo1.jar
方法二找到挂在路径直接传进去
通过docker inspect找到MergedDir目录这是docker容器在宿主机上存储空间的挂载点所以在宿主机上的这个目录和docker容器内是互通传到宿主机这个目录内就等于放到docker容器里了
docker inspect demo1 3.2.2修改容器启动时执行的命令
先关掉docker不然修改容器配置无效
systemctl stop docker
先要找到docker容器的配置文件还是用docker inspect这次找ResolvConfPath复制到文件夹那层resolv.conf不用
docker inspect demo1 进入到目录中用vi打开config.v2.json文件 Path可执行文件Args执行参数Cmd启动容器时会执行的命令如果用户启动容器时候指定了运行的命令则会覆盖掉CMD指定的命令Entrypoint启动容器时会执行的命令如果用户启动容器时候指定了运行的命令不会被docker run执行的命令参数覆盖。追加效果docker run命令之后的参数会被当做参数传递给ENTRYPOINT之后形成新的命令组合这里只是做docker容器启动时自启java项目用Cmd或者Entrypoint都行
我们执行java -jar /usr/local/web/demo1.jar这里可执行文件是java-jar和/usr/local/web/demo1.jar是执行java的参数所以做如下配置修改完成后保存文件 保存后启动docker服务然后查看容器配置这时启动容器后就会自动运行java文件了可通过映射的端口访问测试
systemctl start docker
docker start demo1
docker inscept demo1 访问不到可能是宿主机端口没开自己开下