使用Docker安装软件

1.安装Centos

在linux中使用Ctrl+alt+T打开终端

验证网络

#如果你安装的是centos6 ifconfig eth0

ifconfig ens33         inet 192.168.1.34

# -c 4:ping 4次              测试访问次数
ping -c 4 www.baidu.com

远程连接

2.使用Docker安装软件

2.1 安装docker

2.1.1 查看有没有安装旧版本的

[root@localhost ~]# yum remove docker docker-common docker-selinux docker-engine
已加载插件:fastestmirror
参数 docker 没有匹配
参数 docker-common 没有匹配
参数 docker-selinux 没有匹配
参数 docker-engine 没有匹配
不删除任何软件包

2.1.2 安装依赖软件包

# yum-utils 提供的是yum-config-manager 另外两个是device-mapper驱动

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

2.1.3 设置yum源

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.1.4 查看所有docker版本

[root@localhost ~]# yum list docker-ce --showduplicates | sort -r

2.1.5 安装docker

[root@localhost ~]# yum install docker-ce -y

2.1.6 验证是否安装成功

[root@localhost ~]# docker version

2.1.7 启动并且设置为开机自动启动

# 启动 centos6 service docker start
[root@localhost ~]# systemctl start docker
# 开机自动启动 centos6 service docker enable
[root@localhost ~]# systemctl enable docker

# 查看启动状态
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 二 2021-08-17 21:58:15 EDT; 22s ago
     Docs: https://docs.docker.com
 Main PID: 13923 (dockerd)
   CGroup: /system.slice/docker.service
           └─13923 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

2.2 安装mysql

2.2.1 安装

[root@localhost ~]# docker pull mysql:5.7

2.2.2 查看镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       6c20ffa54f86   15 hours ago   448MB

2.2.3 启动容器[root@localhost ~]# docker run -p 3306:3306 --name mysql \

-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mydsql/data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -d mysql:5.7;

选项说明:

选项说明
-p端口映射,主机的3306端口 :容器的3306端口
-name容器名
-v主机跟容器目录映射关系 主机 :容器
-e配置信息,此处配置的是mysql默认密码

2.2.4 查看是否启动成功

# ps 表示当前正在运行的容器 ps -a 所有运行过的容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
be80aa96d6c0   mysql:5.7   "docker-entrypoint.s…"   6 minutes ago   Up 6 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

2.2.5 问题:远程连接失败

1.防火墙

# 查看防火墙启动状态
[root@localhost ~]# systemctl status firewalld
# 开放端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重新加载防火墙
[root@localhost ~]# firewall-cmd --reload
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld

2.远程访问权限

# 进入mysql容器
[root@localhost ~]# docker exec -it mysql bash
root@be80aa96d6c0:/# ls
bin  boot  dev  docker-entrypoint-initdb.d  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 进入mysql
root@be80aa96d6c0:/# mysql -uroot -p
Enter password: 
# 使用哪个数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 查看root用户可以在哪些地址上访问 % 表示任何地址
mysql> select host,user from user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)

# 如果上述你没有百分号,需要设置
mysql> grant all privileges on *.* to root@'%' identified by "123456";
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 刷新
mysql> flush privileges;

# 刷新之后再去执行 select host,user from user;

2.2.6 问题:字符编码

# 查看字符编码
mysql> show variables like'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
# 设置字符编码
mysql> set names 'utf8';
Query OK, 0 rows affected (0.00 sec)
# 设置字符编码
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.01 sec)
# 再次查看字符编码
mysql> show variables like'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

2.2.7 在图形化界面去导入sql

2.3 安装redis数据库

2.3.1 安装

# 下载镜像
[root@localhost ~]# docker pull redis:5.0.11
# 查看镜像
[root@localhost ~]# docker images
# 运行容器
[root@localhost ~]# docker run -p 6379:6379 --name redis \
-v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/data:/data \
-d redis:5.0.11 redis-server /etc/redis/redis.conf \
--appendonly yes
# 查看容器运行
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
74bd194b56a8   redis:5.0.11   "docker-entrypoint.s…"   6 seconds ago    Up 6 seconds    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
be80aa96d6c0   mysql:5.7      "docker-entrypoint.s…"   45 minutes ago   Up 45 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

选项说明

选项说明
-d redis-server /etc/redis/redis.conf \根据redis.conf配置文件启动redis-server
--appendonly yesredis启动后持久化数据
<think> 我们正在讨论使用Docker安装和升级软件的方法。根据提供的引用,用户主要关注如何安装和升级Docker本身,但问题实际上是关于使用Docker安装和升级其他软件版本。因此,我们需要调整方向:Docker的主要用途是容器化应用程序,所以“软件”在这里指的是运行在容器中的应用程序,而Docker引擎本身。 关键点: 1. 使用Docker安装软件:通常指拉取包含该软件的镜像并运行容器。 2. 升级软件版本:指更新到该软件的新版本,可以通过拉取新版本的镜像并重新运行容器来实现。 步骤: 一、安装软件(以Nginx为例): 1. 搜索镜像:`docker search nginx` 2. 拉取镜像:`docker pull nginx`(默认最新版)或指定版本`docker pull nginx:1.18.0` 3. 运行容器:`docker run --name mynginx -p 80:80 -d nginx` 二、升级软件版本(以Nginx为例): 1. 停止并删除旧容器:`docker stop mynginx` 然后 `docker rm mynginx` 2. 拉取新版本镜像:`docker pull nginx:1.19.0`(或直接`docker pull nginx`获取最新版) 3. 重新运行容器(使用相同的命令):`docker run --name mynginx -p 80:80 -d nginx` 注意:如果容器中有需要保留的数据,应使用数据卷(volumes)来持久化数据,这样在删除容器时数据会丢失。 三、使用Docker Compose管理(推荐): 通过编写docker-compose.yml文件,可以更方便地管理容器配置和版本升级。 示例docker-compose.yml: ```yaml version: '3' services: web: image: nginx:1.18.0 # 指定版本 ports: - "80:80" volumes: - ./html:/usr/share/nginx/html ``` 升级时,只需修改yml文件中的版本号,然后运行: `docker-compose down` # 停止并删除容器 `docker-compose up -d` # 重新创建容器(会自动拉取新镜像) 四、使用Docker的其他注意事项: - 使用官方镜像:确保软件来源可靠。 - 理解镜像标签:标签通常表示版本,例如`nginx:1.18.0`,`python:3.8`等。 - 多阶段构建:如果软件需要构建,可以使用Dockerfile的多阶段构建来构建镜像。 根据引用[5],我们也可以注意到安装指定版本的Docker引擎的方法,但这与在容器中运行软件同层面的问题。如果用户需要升级Docker引擎,可以参考引用中提供的方法(例如在Ubuntu或CentOS上升级)。 但是,用户的问题明确是“使用docker安装和升级软件版本”,所以我们重点放在容器内的软件管理。 相关问题: 1. 如何在Docker容器中持久化数据以避免升级时数据丢失? 2. 如何使用Docker Compose管理多个容器的版本升级? 3. 如何确保使用Docker镜像是安全可靠的? </think> ### Docker安装和升级软件版本的方法 #### 一、安装软件版本 1. **拉取指定版本镜像** 使用`docker pull`命令获取特定版本的应用镜像: ```bash docker pull <软件名>:<版本号> # 例如:docker pull nginx:1.18.0 ``` 2. **运行容器** 启动容器时通过镜像标签指定版本: ```bash docker run -d --name <容器名> <软件名>:<版本号> ``` 3. **验证版本** 进入容器检查软件版本: ```bash docker exec -it <容器名> <软件名> --version ``` #### 二、升级软件版本 1. **停止旧容器** ```bash docker stop <容器名> && docker rm <容器名> ``` 注意:确保已通过**数据卷(Volumes)持久化数据**,避免数据丢失[^1][^4]。 2. **拉取新版本镜像** ```bash docker pull <软件名>:<新版本号> # 例如:docker pull mysql:8.0 ``` 3. **启动新容器** 复用原有数据和配置: ```bash docker run -d --name <新容器名> -v <数据卷名>:/data <软件名>:<新版本号> ``` 4. **版本回退(可选)** 若需回退到旧版本,直接指定旧版本镜像运行: ```bash docker run -d --name <容器名> <软件名>:<旧版本号> ``` #### 三、最佳实践 1. **版本锁定** 在Dockerfile或docker-compose.yml中固定版本号: ```dockerfile FROM python:3.9-slim # 明确指定基础镜像版本 ``` ```yaml # docker-compose.yml services: app: image: redis:6.2-alpine ``` 2. **多版本共存** 通过同容器名称运行多个版本: ```bash docker run -d --name php7_app php:7.4 docker run -d --name php8_app php:8.0 ``` 3. **版本查询** 查看可用版本列表: ```bash docker search --filter=is-official=true <软件名> # 官方镜像 ``` ### 注意事项 1. **数据持久化** 务必使用`-v`参数挂载数据卷,确保升级时数据安全[^1][^4]。 2. **依赖兼容性** 升级前检查新版本的系统依赖(如glibc版本)是否兼容[^2]。 3. **容器编排** 使用Docker Compose或Kubernetes可简化多容器版本管理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值