参考链接::https://blog.csdn.net/qq_39997939/article/details/131005939
首先安装一些必要的包:
yum install -y yum-utils device-mapper-persistent-data lvm2
然后添加 Docker 仓库:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
注:如果出现如下错误,这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils安装就可以了
[root@ecs-1pku3 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager:找不到命令
现在,你可以安装 Docker 了:
yum install docker-ce
启动 Docker 并设置开机启动
安装完 Docker 后,我们需要启动 Docker:
systemctl start docker
我们也可以让 Docker 在启动时自动运行:
systemctl enable docker
参考链接:https://blog.csdn.net/A15130402745/article/details/128983421
我这里选择了6.2.6版本
docker pull redis:6.2.6
查看镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.2.6 da63666bbe9a 23 hours ago 138MB
做远程连接配置
mkdir -p /app/redis/data
mkdir -p /app/redis/conf
上传一份redis官网默认原始的redis.conf上传至/app/redis/conf目录下
注:redis.conf必须与要运行的redis容器版本一致,否则可能会报标签不识别的错误
修改redis.conf的配置相关
chmod -R 755 /app/redis/conf/*; #赋予权限
vim /app/redis/conf/redis.conf; #编辑redis的配置文件
运行容器(-v这里表示指定你的redis配置文件)
docker run -p 6379:6379 --name redis -v /app/redis/conf/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf
我遇到这个报错
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect
进入/etc/sysctl.conf 文件,设置 ’ vm.overcommit_memory = 1
然后又遇到了启动不成功,而且docker logs redis 没有日志,多方询问 原因是
在redis.conf中注掉daemonize yes这一行,或者改为daemonize no。因为我们的docker run里参数-d就是以守护进程方式启动redis,而配置文件里daemonize yes这个东东再次以守护进程方式启动,而且它会读取pidfile这个配置的文件作为进程ID文件。说白了,就是docker启动参数跟redis.conf配置冲突了。
[root@localhost /]# docker run -p 6379:6379 --name redis -v /app/redis/conf/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf
e7bb07133a5af5f2a307a5c48e0ace794930f48339b563cd33d7c9250ad11006
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7bb07133a5a redis "docker-entrypoint.s…" 40 seconds ago Up 40 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis-test
然后可以尝试连接一下
参考链接:https://zhuanlan.zhihu.com/p/640744750
我直接下载指定版本的mysql镜像
docker pull mysql:5.7
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest da63666bbe9a 23 hours ago 138MB
mysql 5.7 8da80fe49fcf 5 days ago 577MB
使用镜像运行容器
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=Root_123456 -d mysql:5.7
执行完后 尝试连接 root Root_123456
Dockerfile文件
# 基于java镜像创建新镜像
FROM openjdk:8
# 作者
MAINTAINER laopifu
# 将jar包添加到容器中并更名为app.jar
ADD /app/laopifu/laopifu-1.0.jar laopifu.jar
# 运行jar包
ENTRYPOINT ["nohup","java","-jar","laopifu.jar","&"]
准备项目jar包,创建一个项目目录 将jar包和Dockerfile文件放到一起
-t:打包后的镜像名称 -f:Dockerfile文件的路径,注意最后那个空格和点
先切换到根目录 cd /
docker build -t laopifuv2 -f /app/laopifu/Dockerfile .
然后运行容器
docker run -d -p 8082:8082 --name laopifuv2 laopifuv2
doocker ps查看一下运行情况(没有的话 用docker ps -a)
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43c4b54e2b99 mysql:5.7 "docker-entrypoint.s…" 57 minutes ago Up 57 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
e7bb07133a5a redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis-test
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
81ea62a9bece laopifuv2 "nohup java -jar 'la…" 7 minutes ago Exited (1) 7 minutes ago laopifuv2
43c4b54e2b99 mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
e7bb07133a5a redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis-test
我这里没有出现项目,查看日志发现报错
docker logs laopifuv2
最后处理好报错,再查看一下
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c68b71ebacdb laopifuv2 "nohup java -jar lao…" 8 seconds ago Up 7 seconds 0.0.0.0:8082->8082/tcp, :::8082->8082/tcp laopifuv2
43c4b54e2b99 mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
e7bb07133a5a redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis-test
正常启动了
在虚拟机外浏览器访问正常运行
重启虚拟机后容器需要重启
docker restart redis-test
docker restart mysql
docker restart laopifuv2
也可以使用docker 的 桥接 的网络模式 使用容器名称进行连接
就像这样
使用桥接方式
docker network create my-net
2. 将需要通信的容器使用自定义网络启动
记得注意一下mysql的数据,容器删除后数据库会丢失
[root@localhost /]# docker run -p 6379:6379 --name redis --network my-net -v /app/redis/conf/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf
c87aa1370897bb9aca32937459a6551d0cb7ddc1050fd111e379981b152edcaf
[root@localhost /]# docker run -p 3306:3306 --name mysql --network my-net -e MYSQL_ROOT_PASSWORD=Root_123456 -d mysql:5.7
e82d7767f6805b7a2dce7951af3047590fa5d4e209b740c9cb8337c93e576015
[root@localhost /]# docker run -d -p 8082:8082 --network my-net --name laopifuv2 laopifuv2
25a9616917749803a883c8d9bb408282ebfee2ad6a9b1854eb52210e19ba701a
docker network inspect my-net