正文
一、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
三、阿里镜像加速器配置
阿里地址 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
四、常用的命令
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; } } }
浏览器访问 发现实现了负载均衡的效果
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
然后进入容器
主从配置
安装主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即可