Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
目录
一、从空白系统中克隆Centos7系统
二、使用xshell连接docker_tigerhhzz虚拟机编辑
三、在CentOS7基础上安装Docker容器
四、在Docker中进行安装Portainer
4.1、在Docker中安装MySQL
4.2、在Docker中安装JDK8,安装Java环境
4.3、Docker安装redis(缓存)
4.4、使用 Docker 快速搭建自己的 GitLab
五、项目部署所需
1、安装C和C++的环境
2、安装Nginx反向代理
最近自己在虚拟机上搭建一个docker,将项目运行在虚拟机中。
需要提前准备的工具,XShell(远程链接工具),VM(虚拟机-配置网络)、CentOS7(Linux操作系统-在虚拟机上安装)
一、从空白系统中克隆Centos7系统
选择已经安装好的centos7系统,鼠标右键--管理---克隆:




开启docker_tigerhhzz虚拟机

二、使用xshell连接docker_tigerhhzz虚拟机




连接成功!!!
查看主机名:
hostname

修改主机名为docker_tigerhhzz
vi /etc/hostname
:wq保存退出
重启系统 reboot
三、在CentOS7基础上安装Docker容器
1.已经安装CentOS7后,打开终端,我这里是切换到了root用户,不然每一个命令都要在前面加上【sudo】
2. 通过前面就知道我是CentOS7,然后官方建议Linux内核在3.10以上【可能】,所以检查当前的内核版本
uname -r

我这里的版本是3.10,正好满足要求。
3.使用root权限对yum包进行更新
yum -y update
注释:以下两个的区分
yum -y update #升级所有包同时也升级软件和系统内核yum -y upgrade #只升级所有包,不升级软件和系统内核

4.如果之前已经安装过的话,可以在此卸载以前的版本。
yum remove docker docker-common docker-selinux docker-engine
5.开始安装Docker了,安装需要的软件包,分别为yum-util 提供yum-config-manager功能,另外两个则是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
出现如下图所示,则代表成功安装了需要的软件包

6.设置yum源,我一般使用阿里仓库的,以下有两种推荐
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(中央仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
推荐使用阿里云!!!(阿里仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

7. 先查看一下有哪些Docker版本。
yum list docker-ce --showduplicates | sort -r

8.选择一个版本进行安装,我这里选择docker-ce-18.03.1.ce,当然可以选择其他版本
yum -y install docker-ce-18.03.1.ce

显示如上图则代表安装成功
9.启动Docker并设置开启自动启动
systemctl start docker #启动Dockersystemctl enable docker #开启开机自启模式

10.查看docker版本
docker version
结束Docker的安装了
四、在Docker中进行安装Portainer
1.拉取portainer镜像,当然你可以事先搜索一下有哪些Portainer镜像
搜索镜像:
docker search portainer

拉取镜像:
docker pull portainer/portainer
2.查看镜像是否被拉取成功
docker images

3.运行portainer
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --name prtainer portainer/portainer
解释:
- -d:容器在后台运行;
- -p 9000:9000 :宿主机9000端口映射容器中的9000端口(前面的是宿主机端口,后面的是容器端口);
- –restart 标志会检查容器的退出代码,并据此来决定是否要重启容器,默认不会重启;
- –restart=always:自动重启该容器;
- -v /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;
- -v portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;
- –name prtainer-test : 给容器起名为portainer;
4.查看portainer是否在运行
docker ps

5.发现portainer确实已经正在运行,所以我们现在就可以去使用Portainer了。
访问地址为:http://虚拟机IP:9000,ip是指你当前虚拟机的ip,首次访问要创建管理员账号和密码(用户名:admin,密码:123456),如下图所示



这就结束了Docker安装Portainer了。
4.1、在Docker中安装MySQL
1、在系统中可能存在mysql的安装包,使用docker ps -a查看运行的所有容器。
如果已经存在mysql镜像的容器,可以使用以下命令停止和删除使用该MySQL镜像的容器:
docker ps -a
docker stop mysql-container # MySQL镜像的容器名称docker rm mysql-container # MySQL镜像的容器名称 mysql-container为MySQL镜像的容器名称。
2、可能删除出现问题,采用强制删除MySQL镜像:使用以下命令强制删除MySQL镜像:
docker rmi -f mysql:latest
这将强制删除名为"mysql:latest"的MySQL镜像。
3、当删除完成之后,重新拉取MySQL镜像:
docker pull mysql:latest
Error response from daemon: missing signature key错误解决:
docker安装的版本低了,需要升级:

完整复制下面的内容
yum erase docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce
执行完之后,再执行
yum install docker-ce -y
至此,已经更新完毕,不需要卸载docker其他的东西,有些还要将容器什么的全部卸载,不用
下载完后,需要重启 docker
# 启动docker
systemctl start docker# 开启开机自启模式
systemctl enable docker
这时候,拉取镜像还是出现了一些问题,docker 在启动容器的时候,报错
Error response from daemon: unknown or invalid runtime name: docker-runc
解决方式如下,执行以下命令
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
然后,重启docker
# 启动docker
systemctl start docker# 开启开机自启模式
systemctl enable docker
4、重新运行MySQL容器:在删除容器和镜像后,重新运行MySQL容器:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
5、运行完成之后,检验是否安装成功
docker exec -it mysql-container bash #进入mysql容器中mysql -r -p #输入密码登录select version(); #查看版本号Show databases; #查看全部数据库

6、至此数据库MySQL安装完成。

7、为了方便操作数据库,我们使用Navicat,来远程链接虚拟机MySQL。
通过SSH方式链接,可以查看到全部的数据库,方便开发使用。

8、通过portainer查看MySQL运行情况
portainer登录用户名admin
登录密码123456123456


4.2、在Docker中安装JDK8,安装Java环境
1、拉取Java镜像(OpenJDK 8):
docker pull openjdk:8-jdk# 或者直接用docker运行 jdk1.8,如果找不到jdk镜像,docker会自动从远程仓库中拉取最新的jdk镜像,下载完成后自动启动运行。docker run -di --name=jdk1.8 openjdk
2、查看镜像
docker ps

3、进入jdk容器
docker exec -it jdk1.8 /bin/bash
4、验证Java是否正确安装:
java -version

Java正确安装,可以看到JDK 8的版本信息。
5、可以通过portainer查看jdk是否在运行
http://192.168.162.100:9000/#!/2/docker/containers

4.3、Docker安装redis(缓存)
1、拉取Redis镜像并运行容器:
拉取Redis镜像:
docker pull redis

运行Redis容器:
docker run -d --name myredis -p 6379:6379 redis
2、这将在后台运行一个名为myredis的Redis容器,并将容器内的6379端口映射到主机的6379端口。
验证Redis是否正确安装:
使用Redis客户端连接到Redis容器:
docker exec -it myredis redis-cli
3、在Docker中设置Redis的密码
请参考阅读博文:在Docker中设置Redis的密码
4、在Redis命令行中执行一些简单的命令,例如:
auth 12345 #授权,输入redis密码set mykey "Hello Redis"get mykey
5、能够成功设置和获取键值对,则表示Redis已正确安装并运行。

6、可以通过portainer查看redis是否在运行

4.4、使用 Docker 快速搭建自己的 GitLab
1,「下载镜像」
通过 docker pull 命令下载 gitlab 的镜像,这个过程需要花费一些时间
docker pull gitlab/gitlab-ce:latest
下载完成后查看一下是否下载成功,如果你能看到输出信息中已经有了 gitlab/gitlab-ce 的话,说明镜像下载成功了
docker images

2,启动服务
现在我们只需要启动 gitlab 服务就可以了
docker run --detach \--publish 10443:443 --publish 1080:80 --publish 1022:22 \--name gitlab \--restart always \--volume /mydata/gitlab/config:/etc/gitlab \--volume /mydata/gitlab/logs:/var/log/gitlab \--volume /mydata/gitlab/data:/var/opt/gitlab \gitlab/gitlab-ce:latest
「配置项」
-
--shm-size 32g ; 将 shm 共享内存的大小设置为了 32G,一开始的时候我没有设置,导致总是报 500 或者 502 的错误
-
--hostname dockertigerhhzz.com ; 设置你的 gitlab 服务所使用的域名,随后你进入到 gitlab 的 web 界面后,通过 git 拉取代码或者推送代码,它在 web 界面所展示的主机的地址都是会受这个配置项影响的
-
--publish 10443:443 ; 将 宿主机的10443 端口和 docker 容器的 443 端口映射,剩余两个端口映射同理
-
--name gitlab ; 配置启动后的容器名
-
--restart always ; 容器挂掉了是否自动重启,自动自动重启
-
--volume /mydata/gitlab/config:/etc/gitlab \ 将宿主机的volume /mydata/gitlab/config 目录挂载到 Docker 容器的 /etc/gitlab 目录上,其实就是让它存数据的时候直接存在宿主机的文件系统上嘛。在这里我挂在目录的时候使用了宿主机上,我们创建的那些目录的绝对路径形式。剩余的两个目录挂载也是同理的
好啦,现在我们就运行上面的那一串命令就可以启动 gitlab 服务了,启动需要花一些时间,大概 1 到 2 分钟的样子。
3,「查看容器状态」
通过如下命令查看容器是否正常运行
docker ps
在这里可以看到,我的服务已经运转了 。

4,开启防火墙的指定端口
由于Gitlab运行在1080端口上,所以我们需要开放该端口,注意千万不要直接关闭防火墙,否则Gitlab会无法启动。
# 开启1080端口
firewall-cmd --zone=public --add-port=1080/tcp --permanent
# 重启防火墙才能生效
systemctl restart firewalld
# 查看已经开放的端口
firewall-cmd --list-ports
5,访问Gitlab
- 访问地址:http://192.168.162.100:1080/
- 由于Gitlab启动比较慢,需要耐心等待10分钟左右,如果Gitlab没有启动完成访问,会出现如下错误。

- 可以通过docker命令动态查看容器启动日志来知道gitlab是否已经启动完成。
docker logs gitlab -f
Gitlab的使用Gitlab启动完成后第一次访问,会让你重置root帐号的密码
「默认账户」
-
用户名: 默认的用户名是
root -
密码:而
root用户默认的密码是被放在~/mydata/gitlab/config目录中的initial_root_password文件中,你可以通过命令cat ~/mydata/gitlab/config/initial_root_password来查看内容,然后把这个密码复制下来就可以登录gitlab了
注意我们在找默认密码的时候,是在宿主机的目录中去找,因为你已经把这个目录给挂载上去了,你就直接在宿主机的文件系统中去找那个默认密码的文件就可以了,并且这个默认密码的文件会在 24 小时后被自动删除,你一定要及时修改密码嗷。
「关于备份」
你只需要把我们创建的那三个文件夹备份好就可以了,如果换了一个地方部署 gitlab 应用,你只需要把相应的文件夹进行挂载即可
五、项目部署所需
1、安装C和C++的环境
1、在docker中下载环境并部署
yum install gccyum install gcc-c++
2、输入命令检查是否安装成功
gcc --versiong++ --version
3、C和C++的环境安装成功!

2、安装Nginx反向代理
1、拉取nginx镜像
docker pull nginx
2、运行启动
docker run -d -p 80:80 --name mynginx nginx
3、打开浏览器输入http://192.168.162.10:80,可以出现默认nginx的页面,表示安装成功

相关文章:
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
目录 一、从空白系统中克隆Centos7系统 二、使用xshell连接docker_tigerhhzz虚拟机编辑 三、在CentOS7基础上安装Docker容器 四、在Docker中进行安装Portainer 4.1、在Docker中安装MySQL 4.2、在Docker中安装JDK8,安装Java环境 4.3、Docker安装redis&#…...
科研学习|研究方法——Python计量Logit模型
一、离散选择模型 莎士比亚曾经说过:To be, or not to be, that is the question,这就是典型的离散选择模型。如果被解释变量时离散的,而非连续的,称为“离散选择模型”。例如,消费者在购买汽车的时候通常会比较几个不…...
灵活运用Vue指令:探究v-if和v-for的使用技巧和注意事项
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、作…...
nvidia-docker部署pytorch服务【GPU工作站】
文章目录 一、安装 Docker二、安装 NVIDIA Container Toolkit三、宿主机安装 cuda 和 nvidia-driver四、测试一、安装 Docker 可以参考这篇文章 https://blog.csdn.net/weixin_43721000/article/details/124237932 二、安装 NVIDIA Container Toolkit 参考nvidia官方 https:/…...
单链表的实现
CSDN主页:醋溜马桶圈_C语言进阶,初始C语言,数据结构-CSDN博客 Gitee主页:mnxcc (mnxcc) - Gitee.com 专栏:数据结构_醋溜马桶圈的博客-CSDN博客 目录 1.认识单链表 2.创建单链表 3.单链表的操作 3.1打印单链表 3.2开辟新空间 3.3尾插 3.4头插…...
【python】面向对象(类型定义魔法方法)
目录 一、引言 二、类型定义 1、什么是类型的定义? 2、案例 三、魔法方法 1、什么是魔法方法 2、基础部分 3、比较操作 4、容器类型 5、属性管理 6、封装 7、方法拓展 8、继承 9、多态 一、引言 Python是一种面向对象的语言,它支持类&#…...
1.微服务与SpringCloud
微服务和SpringCloud 文章目录 微服务和SpringCloud1.什么是微服务2.SpringCloud3. 微服务 VS SpringCloud4. SpringCloud 组件5.参考文档6.版本要求 1.什么是微服务 微服务是将一个大型的、单一的应用程序拆分成多个小型服务,每个服务实现特定的业务功能ÿ…...
【2023全网最全最火】Selenium WebDriver教程(建议收藏)
在本教程中,我将向您介绍 Selenium Webdriver,它是当今市场上使用最广泛的自动化测试框架。它是开源的,可与所有著名的编程语言(如Java、Python、C#、Ruby、Perl等)一起使用,以实现浏览器活动的…...
dimp 导入dmp文件报错:无效的模式名(DM8:达梦数据库)
dimp 导入dmp文件报错:无效的模式名-DM8:达梦数据库 环境介绍1 搭建A1 数据库52361.1 A1数据库5236创建模式名,表,测试数据1.2 从A1数据库5236导出dmp文件 2 搭建A2数据库52372.1 创建 数据用户ABC2311152.2 在A2 数据库5237 导入DMP(报错无效的模式名)2.3 使用REMAP_SCHEMAABC…...
宿主机无法连接docker里的redis问题解决(生产环境慎用)
宿主机无法连接docker里的redis问题解决(生产环境慎用) 问题描述解决方案 问题描述 1.连接超时 2.连接能连上但马上断开并报错 3.提示保护模式什么的 (error) DENIED Redis is running in protected mode because protected mode is enabled链接redis …...
给女朋友开发个小程序低价点外卖吃还能赚钱
前言 今天又是无聊的一天,逛了下GitHub,发现一个库里面介绍美团饿了吗外卖红包外卖优惠券,先领红包再下单。外卖红包优惠券,cps分成,别人领红包下单,你拿佣金。哇靠,那我岂不是可以省钱还可以赚钱,yyds。。。。想想都美好哈哈哈!!! 回到正题,这个是美团饿了么分销…...
外贸客户管理系统是什么?推荐的管理软件?
外贸客户管理系统哪个好用?海洋建站如何选管理系统? 外贸客户管理系统,是一款专为外贸企业设计的客户关系管理系统,旨在帮助外贸企业建立与维护客户关系,提高客户满意度和忠诚度,提升企业业绩。海洋建站将…...
数据挖掘:分类,聚类,关联关系,回归
数据挖掘: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学&…...
力扣labuladong一刷day10一网打尽股票买卖问题共6题
力扣labuladong一刷day10股票买卖问题共6题 一、121. 买卖股票的最佳时机 题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路:只能买入1次,定义dp[i][0]数组表示第i天持有股票时手中的最大金额 数,…...
微信小程序手写table表格
wxml <view class"table"><view class"tr bg-w"><view class"th">张三</view><view class"th" style"color: #409eff;">李四</view><view class"th ">王五</view&…...
UE5 - UI Material Lab 学习笔记
1、学习资料收集 UI Material Lab : https://www.unrealengine.com/marketplace/zh-CN/product/ui-material-lab 视频1:https://www.bilibili.com/video/BV1Hm4y1t7Kn/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 视…...
oracle删除重复的数据
去除重复数据: group by 对要比对的字段进行查询是否重复 CREATE TABLE 临时表 AS (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1) 上面这句话就是建立了临时表,并将查询到的数据插入其中。 下面就可以进行…...
Python中的并发编程是什么,如何使用Python进行并发编程?
Python中的并发编程是指使用多线程或多进程来同时执行多个任务。这样可以提高程序的执行效率,特别是在处理I/O密集型任务时。Python提供了多种方式来实现并发编程,如threading模块和multiprocessing模块。 使用Python进行并发编程的方法如下:…...
【LeetCode】136. 只出现一次的数字
136. 只出现一次的数字 难度:简单 题目 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用…...
HTTP服务器——tomcat的安装和使用
文章目录 前言下载tomcattomcat 文件bin 文件夹conf 文件lib 文件log 文件temp 文件webapps 文件work 目录 如何使用 tomcat 前言 前面我们已经学习了应用层协议 HTTP 协议和 HTTP 的改进版——HTTPS,这些协议是我们在写与服务器相关的代码的时候息息相关的&#x…...
从“工具辅助”到“智慧赋能”:青软青之深度集成LIMS、ELN、AUTO等核心系统,打造全场景智慧实验室新范式
在科研创新迭代加速、检验检测产业升级纵深推进的今天,实验室作为创新源头,其运行效率与管理水平直接决定研发效能与质量。传统依赖人工记录、纸质流转和信息孤岛的模式,已难以适应复杂实验需求与严苛合规监管。智慧实验室,正成为…...
【应答器】基于matlab应答器特殊区段信息包报文编码仿真【含Matlab源码 15258期】
💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞Ὁ…...
文墨共鸣大模型处理Java八股文与面试题:智能学习与模拟面试
文墨共鸣大模型处理Java八股文与面试题:智能学习与模拟面试 准备Java技术面试,大概是每个开发者都绕不开的一道坎。面对海量的“八股文”知识点和层出不穷的面试题,你是不是也经历过这样的场景:翻开厚厚的面试宝典,感…...
C语言基础:LiuJuan20260223Zimage嵌入式开发入门
C语言基础:LiuJuan20260223Zimage嵌入式开发入门 1. 学习目标与前置知识 如果你是刚开始接触嵌入式开发的C语言初学者,这篇文章就是为你准备的。我们将从最基础的C语言语法开始,一步步带你了解如何在嵌入式环境中使用C语言进行开发。不需要…...
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南根据您提供的快报内容,我将从专业角度逐步分析欧美组合式一氧化碳(CO)及可燃气体报警器的关键信息,包括安全标准、风险因素、探测器区别、安装建议以及相关产…...
终极指南:如何用ImageToSTL将任何图片变成3D打印模型
终极指南:如何用ImageToSTL将任何图片变成3D打印模型 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. …...
掌握5个核心配置技巧:OpenCore-Configurator从入门到专家
掌握5个核心配置技巧:OpenCore-Configurator从入门到专家 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator OpenCore-Configurator(简称…...
React - useEffect、useRef、Fragment
一、useEffect 1、基本介绍 useEffect 用于在函数式组件中执行副作用操作,用于替代类组件中的生命周期钩子 useEffect(() > {// 副作用操作return () > {// 清理函数(可选)}; }, [依赖项数组]);副作用操作:发送请求数据获取…...
Laya3D美术进阶:巧用Shader实现APP级游戏效果还原
1. 为什么选择Laya3D的Shader技术? 很多开发者第一次接触Laya3D时,都会有个疑问:为什么不用Unity直接开发?特别是在微信小游戏这个特定场景下,Laya3D的Shader技术到底能带来什么优势?我做了三年Laya小游戏…...
AI集成开发工程师的技术实践与转型之路
第一章:技术架构演进与AI融合趋势 1.1 传统开发范式的演进 现代软件开发正经历从单一业务系统向智能化业务系统的转型。传统的.NET技术栈作为企业级应用开发的基石,其技术架构也在不断演进: // 典型的三层架构示例 public class BusinessLogic {private readonly IDataAc…...

