目录
一、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 的日志文件
{
"registry-mirrors": ["https://3kcpregv.mirror.aliyuncs.com"],
"log-driver":"json-file",
"log-opts":{ "max-size" :"100m","max-file":"1"}
}
四、常用的命令
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;
}
}
}
浏览器访问 发现实现了负载均衡的效果
如果启动过程报错
在docker容器上部署项目后,启动docker容器,出现
Error response from daemon: driver failed programming external connectivity on endpoint nginx (a26d84300f536a2b37db422497bd56081c7f8e22c3180f271a48605a373a5cee): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 443 -j DNAT --to-destination 172.17.0.2:443 ! -i docker0: iptables: No chain/target/match by that name.
解决方案:
1、先看能不能ping通网络。若能依次执行以下命令;
2、pkill docker
3、iptables -t nat -F
4、ifconfig docker0 down
5、brctl delbr docker0
6、docker -d
7、systmctl restart docker
8、重启docker服务
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即可: