Docker的入门以及简单应用的安装

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: Docker的入门以及简单应用的安装

正文


一、Docker简介


Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。


二、Centos安装docker


1、Docker 要求 CentOS 系统的内核版本在 3.10以上 ,通过 uname -r 命令查看你当前的内核版本


[root@localhost ~]# uname -r


3.10.0-957.el7.x86_64


2、确保 yum 包更新到最新。


[root@localhost ~]# yum -y update


3、卸载旧版本(如果安装过旧版本的话,我没安装不执行这个)


yum remove docker docker-common docker-selinux docker-engine


4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的


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


5、设置yum源


[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo(这个是国外的,可能不好使,建议使用阿里的)


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


6、 可以查看所有仓库中所有docker版本,并选择特定版本安装


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


7、安装docker 默认安装最新稳定版本


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


8、启动加入开机启动


[root@localhost ~]# systemctl start docker


[root@localhost ~]# systemctl enable docker


9、 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)


docker version


三、阿里镜像加速器配置


阿里地址 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台


111.png


四、常用的命令


docker images  查看镜像文件


docker ps  查看正在运行的容器


docker ps –a  查看所有的容器


docker container exec -it f0b1c8ab3633 /bin/bash  进入到容器


exit 退出


docker version  查看版本


docker run -d -p 81:80 nginx 启动nginx容器


docker rmi imgageid 删除镜像


docker rm 容器id 删除容器


五、安装常用软件


5.1、安装java


docker pull java:8(数字为指定的java版本)


5.2、安装Nginx


安装nginx


1、拉取镜像


[root@localhost local]# docker pull nginx


运行


docker run -d -p 81:80 nginx


在本例中,为 docker run添加了两个参数,含义如下:


-d 后台运行


-p 宿主机端口:容器端口     #开放容器端口到宿主机端口


访问 http://Docker宿主机 IP:81/,将会看到nginx的主界面如下:


需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。


2. 列出容器用 docker ps命令即可列出运行中的容器


3. 查看容器的信息 docker inspect 3af5513d208e


nginx配置负载均衡


第一中方式进入容器内


docker container exec -it f0b1c8ab3633(容器的id) /bin/bash


默认用用程序安装在/etc/nginx/




然后修改这个文件即可。


需要安装编辑器


apt-get update && apt-get install vim -y


第二种方式(推荐)


创建挂在目录


[root@bogon ~]# mkdir -p /data/nginx/{conf,conf.d,html,logs}


启动nginx

 docker run --name nginx -d -p 80:80 \
 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  \
 -v /data/nginx/conf.d/:/etc/nginx/conf.d \
 -v /data/nginx/html:/etc/nginx/html \
 -v /data/nginx/logs:/var/log/nginx \
 nginx:1.21.4


修改配置文件内容如下


#user  nobody;
worker_processes  1;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream backServer{
  server ip:8080;  #这个ip是服务器的ip 
  server ip:8081;
    }
    server {
        listen       80;
        server_name  www.xiaojie.com;
        location / {
            proxy_pass  http://backServer;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}


浏览器访问 发现实现了负载均衡的效果


222.png


5.3、安装Mysql


安装mysql


拉取镜像


[root@bogon conf]# docker pull mysql:5.7


安装容器


[root@bogon conf]# docker create --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7


启动


[root@bogon conf]# docker start mysql


然后进入容器


333.png


主从配置


安装主mysql


挂载mysql配置文件


在data下创建mysql


[root@bogon ~]# mkdir -p /data/mysql/{conf,data}


启动


修改my.cnf


[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
lower_case_table_names=1
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#添加主节点配置
server_id=1  ###服务器id
log-bin=mysql-bin   ###开启日志文件


启动主库


[root@bogon conf]# docker run --name mysqlmaster  --privileged=true -p 3306:3306 -v /data/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e  MYSQL_ROOT_PASSWORD=root -d mysql:5.7


创建从库挂载目录


mkdir -p /data/mysqlslave/{conf,data }


修改从库my.cnf


[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
lower_case_table_names=1
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#server_id=1  ###服务器id
#log-bin=mysql-bin   ###开启日志文件
#添加从节点配置
server_id=2  ###从服务器server_id
log-bin=mysql-bin  ###日志文件同步方式
binlog_do_db=test   ###同步数据库


启动从库


[root@bogon conf]# docker run --name mysqlslave  --privileged=true -p 3307:3306 -v /data/mysqlslave/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysqlslave/data:/var/lib/mysql -e  MYSQL_ROOT_PASSWORD=root -d mysql:5.7


在主库上执行如下sql


show variables like '%server_id%';


show master status;




看到如下配置成功。


在从库上开始同步


CHANGE MASTER TO master_host = '192.168.139.150',


master_user = 'root',


master_password = 'root',


master_log_file = 'mysql-bin.000003', #上面查询的值


master_log_pos = 355; #上面查询的值


START SLAVE; #开启


STOP SLAVE;


SHOW SLAVE STATUS;


5.4、安装redis


拉取镜像


[root@bogon conf]# docker pull redis


创建挂载目录


mkdir -p /data/redis/{conf,data}


redis.conf 修改和其他安装一直


修改redis为后台启动进程


/将daemonize no 改成daemonize yes


允许IP地址访问


注释掉#bind 127.0.0.1


修改redis启动密码


requirepass xiaojie


启动


[root@bogon conf]# docker run -p 6379:6379 --name redis -v /data/redis/conf/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis


若需要密码启动是


[root@localhost conf]# docker run -p 6379:6379 --name redis -v /data/redis/conf/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis --requirepass xiaojie


六、安装自己的镜像文件


1、创建文件存放jar包


mkdir /usr/local/dockerapp


2、添加Dockerfile文件


Vi Dockerfile


添加以下内容


FROM java:8
###复制文件到容器app-springboot
ADD docker-springboot.jar(你的jar包名称) /app-springboot.jar
###声明启动端口号
EXPOSE 8080
###配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app-springboot.jar"]

3、使用docker build命令构建镜像


docker build -t docker-springboot .(这个点别丢了,同级目录下)


# 格式: docker build -t 镜像名称:标签 Dockerfile的相对位置


4、运行


docker run -p 8080:8080 docker-springboot


注意:报错 ,找不到主类,jar包没有指明mainClass 在pom文件添加如下配置


  <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.xiaojie.controller.IndexController</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>docker-springboot</finalName>
</build>


七、docker卸载应用程序


先删除容器,在删除镜像


查询容器


Docker ps 查询运行的容器


docker ps –a(查询所有的容器)


使用容器id删除容器


docker rm 18e672ecd8ed


查询镜像


docker images


使用镜像id删除镜像


docker rmi d23bdf5b1b1b


注:删除报错是


Error response from daemon: conflict: unable to delete 0611932b0d62 (must be forced) - image is referenced in multiple repositories


解决方案:首先docker rmi时指定名称,而非image id,然后再执行docker rmi -f image id即可

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
10天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
42 2
|
10天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
69 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
4天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
10天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
10天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
12天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
12天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
18天前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
55 2
|
18天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
54 1
|
22天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
59 2
下一篇
无影云桌面