基于阿里云服务器安装Docker完整图文教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 基于阿里云服务器安装Docker完整图文教程

基于阿里云服务器安装Docker完整图文教程

安装Docker
安装Docker Compose (一个完整项目的运行需要安装这个)

这篇文档笔记主要记录自己开始学习部署Docker过程。文章后面有开源项目部署,基于Docker和Docker Compose。活到老,学到老,保持一种空杯心态,用心学知识,学技能。我是一名前端程序员,喜欢折腾新东西,新事物,有兴趣的可以关注我的个人网站(猿视野)。

文章后面会手把手的教你用Docker部署SpringBoot+Vue+MySQL+Nginx开源项目。利用Docker部署项目,主要是为了节约我们有限的时间。开源项目源码:https://github.com/cloudfavorites/favorites-web 待会等我们安装好了docker环境,就带大家一起来部署这个开源项目。

目录 显示
前提条件
一台CentOS7的服务器。我这里用的是阿里云的服务器,选的是CentOS7版本系统
使用xshell6类似的远程连接工具连接到服务器。参考文章:使用xshell6远程连接Linux服务器
如何需要域名访问Docker部署的项目,需要先拥有一个域名哦。我这里演示用的域名是在阿里云申请的。详见阿里云域名注册。
安装命令
建议在linux环境下安装Docker,window环境搭建比较复杂且容易出错,使用Centos7+yum来安装Docker环境很方便。

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:

yum install docker

启动Docker服务
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

service docker start
chkconfig docker on
基于阿里云服务器安装Docker完整图文教程

测试Docker安装成功
测试

docker version
输入上述命令,返回docker的版本相关信息,证明docker安装成功。

基于阿里云服务器安装Docker完整图文教程

设置国内镜像
通过vim修改docker为国内镜像地址:https://registry.docker-cn.com

因为国内连接 Docker 的官方仓库很慢,因此我们在日常使用中会使用Docker 中国加速器。通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker 化应用。

Docker 中国官方镜像加速可通过registry.docker-cn.com访问。该镜像库只包含流行的公有镜像,私有镜像仍需要从美国镜像库中拉取。

修改系统中docker对应的配置文件即可,如下:

vi /etc/docker/daemon.json

添加后

{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}
基于阿里云服务器安装Docker完整图文教程

演示Hello World程序
//运行下面的命令,将 image 文件从仓库抓取到本地。
docker pull library/hello-world

//上面代码中,docker image pull是抓取 image 文件的命令。
//library/hello-world是 image 文件在仓库里面的位置,
//其中library是 image 文件所在的组,hello-world是 image 文件的名字。
docker images

//现在,运行这个 image 文件。
docker run hello-world
基于阿里云服务器安装Docker完整图文教程

输出这段提示以后,hello world就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql镜像等。

安装Docker Compose
通过 Docker-Compose 用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。

Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose .

下载

sudo curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s-uname -m` -o /usr/local/bin/docker-compose

安装

chmod +x /usr/local/bin/docker-compose

查看版本

docker-compose version

基于阿里云服务器安装Docker完整图文教程

常用命令
除过以上我们使用的Docker命令外,Docker还有一些其它常用的命令

拉取docker镜像

docker pull image_name
查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:

docker images
删除镜像

docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30
查看当前有哪些容器正在运行

docker ps
查看所有容器

docker ps -a
启动、停止、重启容器命令:

docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

docker attach container_name/container_id
删除容器的命令:

docker rm container_name/container_id
删除所有停止的容器:

docker rm $(docker ps -a -q)
查看当前系统Docker信息

docker info
从Docker hub上下载某个镜像:

docker pull centos:latest
docker pull centos:latest
查找Docker Hub上的nginx镜像

docker search nginx
执行docker pull centos会将Centos这个仓库下面的所有镜像下载到本地repository。

部署项目演示(云收藏)
部署SpringBoot项目—云收藏

地址: https://github.com/cloudfavorites/favorites-web

-bash: unzip: 未找到命令
说明未安装过, 只需执行如下命令即可. 同样适用 Unix 内核系统.

yum install -y unzip zip
下拉项目:

wget https://github.com/cloudfavorites/favorites-web/archive/favorites-1.3.0.zip
解压

unzip favorites-1.3.0.zip
进入目录

cd favorites-web-favorites-1.3.0/
修改文件application-docker.properties
vi app/src/main/resources/application-docker.properties
修改内容如下

favorites.base.path=http://xx.xxx.xx.xx/
forgotpassword.url=http://xx.xxx.xx.xx/newPassword
地址为部署服务器的地址

部署命令:

docker-compose up --build
或者
docker-compose up -d
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'forgotpassword.url' in value "${forgotpassword.url}"
app_1 | at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:379) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1344) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
app_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.
基于阿里云服务器安装Docker完整图文教程

项目启动成功:

访问ip: http://47.100.188.105/ 查看项目首页

基于阿里云服务器安装Docker完整图文教程

数据备份与恢复
mysql数据备份(shell脚本定时备份mysql数据)

标准格式:

docker exec [mysql-container-name] /usr/bin/mysqldump -u [user] --password=
此处含有隐藏内容,需要正确输入密码后可见!

请输入密码
[database-name] > [backup-file-name]
docker exec CONTAINER /usr/bin/mysqldump -u username --password=xxx DATABASE > backup.sql
案例:

docker exec c7f1b671c57f /usr/bin/mysqldump -u * --password=* favorites | gzip > /root/data_backup/database_name_2021_05_08.sql.gz

上面的备份命令会提示警告:mysqldump: [Warning] Using a password on the command line interface can be insecure.

下面的备份命令不会出现警告。

docker exec -it c7f1b671c57f mysqldump -uroot -p* favorites | gzip > /root/data_backup/database_name_2021_05_07.sql.gz 【放入shell脚本会执行失败,shell命令行执行有效】
脚本定时备份:

!/bin/bash

echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'

Setting environment variables

DATE=$(date +%Y%m%d%H%M_%S)

$(date +%Y%m%d)

数据库用户名

USERNAME=root

密码

PASSWORD=**

要备份的数据库

DB=favorites

Docker容器ID

DOCKERID=c7f1b671c57f

DB1=xxxx

ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。

DIR=/root/data_backup
echo 'Get system date: ' $DATE

if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR

echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")

备份 docker 容器中的数据库

docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称

docker exec -it $DOCKERID mysqldump -u$USERNAME -p$PASSWORD $DB > /root/data_backup/databasename$DATE.sql

上面的备份命令无效,请改为下面的备份数据库命令。

docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD $DB | gzip > /root/data_backup/databasename$DATE.sql.gz

备份 直接安装在 linux 系统中的数据库

/usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB2 | gzip > xxx_$DATE.sql.gz

just backup the latest 7 days

find ${DIR} -name "databasename*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

find ${DIR} -name "databasename*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

保留最新的几份文件

ReservedNum=5
date=$(date "+%Y%m%d-%H%M%S")

FileNum=$(ls -l $DIR|grep ^- |wc -l)

while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt $DIR| head -1)
echo $date "Delete File:"$OldFile
rm -rf $DIR/$OldFile
let "FileNum--"
done

mysql数据备份结束!

echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

我这里采用宝塔面板的定时任务,定时执行shell脚本任务:

基于阿里云服务器安装Docker完整图文教程

查看FinalShell文件备份目录:

基于阿里云服务器安装Docker完整图文教程

mysql数据恢复:

cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u username --password=xxx DATABASE

cat database_name_2021_05_08_18_30_01.sql | docker exec -i 6e64fa337312 /usr/bin/mysql -u 用户名 --password=用户密码 数据库名称
如果修改了mysql my.cnf配置文件的内容,Docker需要重新构建:docker-compose up –build 否则配置文件无法生效。

进入某个容器内部

docker exec -it c7f1b671c57f /bin/bash

进入mysql命令行

mysql -uroot -p

查看max_allowed_packet。该参数设置过小,会导致备份sql恢复失败。默认4MB,设置200MB

show variables like '%max_allowed_packet%';

查找mysql配置文件位置

mysql --help | grep my.cnf

/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

查看docker mysql文件配置

cat /etc/my.cnf
本人在备份数据库以后,恢复备份的sql数据到Docker mysql容器时候,报了一个错误:
ERROR 1153 (08S01) at line 50: Got a packet bigger than ‘max_allowed_packet’

其间,我试过很多方法,都没有改成功。后面经过不断反复尝试,终于改成功了。需要重新构建Docker项目,才能让mysql配置文件修改生效。而不是简单的重启docker容器。

基于阿里云服务器安装Docker完整图文教程

配置修改成功。

基于阿里云服务器安装Docker完整图文教程

然后就是mysql备份数据恢复正常。终于解决了这个小问题了。

注:其中

    CONTAINER:容器别名或者容器id:c7f1b671c57f
    DATABASE:需要操作的数据库名称:favorites
    username:数据库登录的用户名:*
    xxx:数据库登录的密码:**

 执行之后 会有 提示 风险;
 导入导出成功后 dos 会 进入正常输入状态

docker如何查看一个镜像内部的目录结构及其内部都有哪些文件
Docker安装phpmyadmin
安装这个主要是为了在线管理mysql数据库

步骤:

下载最新版本的phpmyadmin

docker pull phpmyadmin/phpmyadmin

启动容器

docker run -d --name myadmin -e PMA_HOST=公网ip -e PMA_PORT=3306 -p 888:80 phpmyadmin/phpmyadmin
命令说明:

-e PMA_HOST=192.168.206.132 数据库的IP地址
-e PMA_PORT=3307 数据库的端口
-p 8283:80 将容器80端口映射到主机的8283端口
–name myadmin 将容器命名为myadmin

浏览器访问:http://公网ip:888/ 在线访问phpmyadmin

基于阿里云服务器安装Docker完整图文教程

报错问题记录
–initialize specified but the data directory has files in it. Aborting.

某段时间重启docker之后,无法启动项目的mysql容器,mysql容器一直处于重启状态,mysql容器启动不了,项目当然也无法正常访问了。继续马上解决。查看日志命令,发现报上面这个错误。

volumes:
  - ./mysql_data:/var/lib/mysql

其中:mysql_data目录为linux硬盘挂载目录。映射到了docker容器目录 /var/lib/mysql
把mysql_data目录下的文件删除就可以,如果数据重要,请先备份,再删除。

解决方法:找到docker mysql datadir挂载目录的具体位置,把这个目录里面的文件先备份一下,然后删除,重新用docker-compose up -d build命令打包启动项目,就能正确的启动mysql容器了。关键的原因是:datadir硬盘挂载的目录里面存在文件,并且遭到了损坏,导致docker mysql容器无法重启。
参考资料:使用Docker快速搭建Mysql,并进行数据卷分离

docker logs 容器id
查看容器启动,运行日志

获取正在运行的docker容器列表,找到具体的容器id

docker ps
docker logs 容器id
启动docker-compose和停止docker-compose

docker-compose属于指编排好了的项目多个容器的指令

停止项目docker

docker-compose stop

重新编译代码和启动项目docker容器

docker-compose up -- build
关注原文更精彩 https://www.yundashi168.com/244.html

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
8天前
|
弹性计算 运维 Ubuntu
在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
本文介绍了在阿里云ECS上使用Ubuntu系统安装和配置Docker及Docker Compose的详细步骤。通过这些工具,可以快速部署、弹性扩展和高效管理容器化应用,满足开发和运维需求。内容涵盖Docker的安装、镜像源配置、创建Web程序镜像以及使用Docker Compose部署WordPress等实际操作,并分享了使用体验,展示了阿里云实例的高性能和稳定性。
150 4
|
8天前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
54 1
|
9天前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
11天前
|
SQL 分布式计算 关系型数据库
基于云服务器的数仓搭建-hive/spark安装
本文介绍了在本地安装和配置MySQL、Hive及Spark的过程。主要内容包括: - **MySQL本地安装**:详细描述了内存占用情况及安装步骤,涉及安装脚本的编写与执行,以及连接MySQL的方法。 - **Hive安装**:涵盖了从上传压缩包到配置环境变量的全过程,并解释了如何将Hive元数据存储配置到MySQL中。 - **Hive与Spark集成**:说明了如何安装Spark并将其与Hive集成,确保Hive任务由Spark执行,同时解决了依赖冲突问题。 - **常见问题及解决方法**:列举了安装过程中可能遇到的问题及其解决方案,如内存配置不足、节点间通信问题等。
151 1
基于云服务器的数仓搭建-hive/spark安装
|
12天前
|
消息中间件 分布式计算 资源调度
基于云服务器的数仓搭建-集群安装
本文介绍了大数据集群的安装与配置,涵盖Hadoop、Zookeeper、Kafka和Flume等组件。主要内容包括: 1. **数据模拟** 2. **Hadoop安装部署**:详细描述了HDFS和YARN的配置,包括NameNode、ResourceManager的内存分配及集群启动脚本。 3. **Zookeeper安装**:解压、配置`zoo.cfg`文件,并创建myid文件 4. **Kafka安装**:设置Kafka环境变量、配置`server.properties` 5. **Flume安装**:配置Flume采集日志到Kafka,编写启动脚本进行测试。
80 1
|
1月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
80 20
|
14天前
|
安全 数据建模 应用服务中间件
SSL证书怎么获得?获得后如何安装到服务器?
在当今互联网时代,SSL证书是保障网站安全的重要工具,实现HTTPS加密和身份认证,防止数据劫持或篡改,提升SEO效果。获取SSL证书需选择可信的CA机构、选择证书类型、生成CSR、验证域名及企业信息并获取证书。安装SSL证书到服务器(如Nginx)涉及上传证书文件、配置Nginx并重启服务。具体步骤可参考详细教程。 简介:SSL证书对网站安全至关重要,涵盖获取与安装流程,包括选择CA、生成CSR、验证信息、配置服务器等关键步骤。
|
Web App开发 Java Linux
Docker简明教程
本文讲的是Docker简明教程,【编者的话】使用Docker来写代码更高效并能有效提升自己的技能。Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间。
2708 0
|
Ubuntu 应用服务中间件 nginx