Docker
1、Docker安装
- 卸载老版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 配置镜像仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云地址
- 安装docker 相关内容
yum makecache fast # 更新软件包
sudo yum install docker-ce docker-ce-cli containerd.io # 安装
- 启动 docker
sudo systemctl start docker
- 阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nzxppyu8.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
- 运行
hello-world
sudo docker run hello-world
2、Docker基本命令
docker pull 'name' # 安装
docker rmi -f 'REPOSITORY' # 删除 -f 强制删除
docker rmi -f $(docker images -q) # 删除全部镜像
docker ps -a -q|xargs docker rm # 删除全部镜像
# 删除 tag 等为 <none> 的镜像
sudo docker images|grep none|awk '{print $3}'|xargs sudo docker rmi
# 出现上述错误,可以移除指定容器(不推荐),可以使用可视化工具Portainer移除(下面实例)
sudo docker rm -f ee0c12940191 # 移除指定容器
docker start 'id' # 启动停止的容器
docker restart 'id' # 重启容器
docker stop 'id' # 停止容器
docker kill 'id' # 强制停止
# 日志 -tf:显示日志 --tail number 要显示的日志条数
docker logs -f -t --tail number 'id'
# 查看容器的进程信息
docker inspect centos
# 查看镜像构建历史
docker history 'IMAGE ID'
# 查看容器的 CPU,MEM 等占用率
docker stats
# 进入容器
docker run -it centos /bin/bash # -it:以交互方式进入 centos 容器
docker run -d 'id' # -d 后台运行
exit # 退出容器,并停止容器运行
ctrl + P + Q # 退出容器,并保持当前容器运行
docker ps -a # 查看当前运行的容器 -a 曾经运行的(可选)
# 进入容器
[root@iZwz9actuhd1532kyp2llsZ ~]# docker ps # 查看进程状态,通过--->CONTAINER ID<--进入容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5a7b998aee3 centos "/bin/bash" 14 minutes ago Up 14 minutes elated_dhawan
[root@iZwz9actuhd1532kyp2llsZ ~]# docker exec -it a5a7b998aee3 /bin/bash
-------------或者------------ # docker attach a5a7b998aee3
# 文件拷贝-- 把容器中的文件拷贝到容器外
docker cp '容器id':/path/filename /path
3、实例
3.1 可视化工具----Portainer
docker pull portainer/portainer
# 单机运行
docker run -d -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer-test \
portainer/portainer
----------------------------------------------------------------
-----访问 http://ip:9000/ ---------输入账号密码登录后,第二个界面选择 local 可直接进入
# 集群运行
docker run -d -p 9000:9000 --restart=always --name prtainer-test portainer/portainer
3.2 安装 RabbitMQ
#指定版本,该版本包含了web控制页面
docker pull rabbitmq:management
# 运行
#方式一:默认guest 用户,密码也是 guest
docker run -d --hostname my_RabbitMQ --name RabbitMQ -p 15672:15672 -p 5672:5672 rabbitmq:management
#方式二:设置用户名和密码
docker run -d --hostname my_RabbitMQ --name RabbitMQ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 -p 15672:15672 -p 5672:5672 rabbitmq:management
------------------访问 http://ip:15672/ ----------------
3.3 安装 Tomcat
# 下载
docker pull tomcat
# 后台启动
docker run -d --name tomcat_test1 -p 8089:8080 tomcat
# 进入容器
docker exec -it 'id' /bin/bash
# 文件拷贝
cp -r webapps.dist/* webapps
------------------访问 http://ip:8089/ ----------------
#
docker run -d -p 8080:8080 --name mytomcat -v /home/tomcat/webapps:/usr/local/tomcat/webapps/ -v /home/tomcat/logs:/usr/local/tomcat/logs tomcat
3.4 Elasticsearch
docker pull elasticsearch:7.10.1
# 数据放置在安全目录,挂载
mkdir -p /home/elasticsearch/config /home/elasticsearch/data /home/elasticsearch/plugins
touch /home/elasticsearch/config/elasticsearch.yml
chmod -R 777 /home/elasticsearch
# 启动
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/elasticsearch/data:/usr/share/elasticsearch/data -v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.10.1
# ES_JAVA_OPTS="-Xms64m -Xmx512m" 设置占用内存大小
# 查看日志,是否启动成功
docker logs -f 容器id
### 访问: http://ip:9200 ###
###### 查看并修改max_map_count 大小
# 查看max_map_count :
cat /proc/sys/vm/max_map_count
# 设置max_map_count
sysctl -w vm.max_map_count=262144
########## 若连接(http://ip:9200)被拒绝 ###########
# 修改 elasticsearch.yml 配置文件,在配置文件中加入
network.host: 0.0.0.0 # 允许来自其他 IP 的连接
###--------------------------------------------------------------------------------
# 安装 kibana,版本与 ES 一致
docker pull kibana:7.10.1
mkdir -p /home/kibana/config/
vi /home/kibana/config/kibana.yml
####### kibana.yml 中添加以下内容 ###########
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://ip(ES):9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#################
# 启动
docker run -d --restart=always --name kibana -p 5601:5601 -v /home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.10.1
# 查看日志,是否启动成功
docker logs -f 容器id
### 访问: http://ip:5601 ###
3.5 Nginx
docker pull nginx # 拉取镜像
mkdir -p /home/nginx/conf /home/nginx/conf.d # 创建配置文件目录
# 拷贝配置文件
docker run --name nginx01 -d nginx:latest
docker cp nginx01:/etc/nginx/nginx.conf /home/nginx/conf #把容器中的nginx.conf文件复制到conf目录下
docker cp nginx01:/etc/nginx/conf.d/default.conf /home/nginx/conf.d #把容器中的default.conf文件复制到conf目录下
docker rm -f nginx01 #删除镜像
# 创建容器
docker run -it -d --name mynginx -p 8088:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf.d:/etc/nginx/conf.d -v /home/nginx/logs:/var/log/nginx nginx
-
转发到指定 Tomcat
-
转发到多个 Tomcat
# default.conf
upstream blance{f
#ip_hash; # 每个访客固定访问一个后端服务器,可以解决 session 的问题
server 172.18.0.8:8080 weight=1;
server 172.18.0.9:8080 weight=1;
#fair; # 按后端服务器的响应时间来分配请求,响应时间短的优先分配
}
location / {
root /usr/share/nginx/html;
# proxy_pass http://172.18.0.8:8080;
proxy_pass http://blance;
index index.html index.htm;
}
- 根据 URL 转发到指定 Tomcat
# url中,根据 http://ip:port/cug 访问,转发到指定 Tomcat
location ~ /cug {
# 目标 Tomcat 的 webapps下要有 cug 文件夹以及相应的资源,比如 index.html
proxy_pass http://172.18.0.9:8080;
}
- 静态资源
# 静态资源放在配置的 root 后面路径下的 pic 文件夹中
location /pic/ {
autoindex on; # 列出整个目录
autoindex_exact_size off; # 显示出文件的大概大小,单位是kB或者MB或者GB,默认为on,显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间,默认为off,显示的文件时间为GMT时间
root /usr/share/nginx/html; # 该路径中有 pic 文件夹,以及相应的图片等静态资源
}
4、Docker 高级
4.1 提交
# 提交容器为一个副本
docker commit -m='describe' -a="author" 'id' '目标镜像':[TAG]
4.2 数据卷 — 数据同步(双向)
#直接在本地修改数据,可直接同步到容器
docker run -it -v 主机目录:容器目录 -p... '镜像ID'
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /主机路径:容器路径 # 指定路径挂载
docker volume ls # 查看卷的情况
#具名挂载---> 挂载到的目录:/var/lib/docker/volumes/xxxxx/_data
docker run -d --name nginx02 -v juming-nginx:/etc/nginx nginx
4.3 Dockerfile
FROM # 基础镜像
MAINTAINEG # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # eg:添加 tomcat安装包
WORKDIR # 镜像工作目录
VOLUME # 挂载到目录
EXPOST # 暴露端口
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被集成 DockerFile,这个时候就会运行 ONBUTILD 的指令,触发指令
COPY # 类似 ADD ,将文件拷贝到镜像中
ENV # 构建的时候设置环境变量
4.4 自定义网络
# 查看所有的 docker 网络
docker network ls
# 自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# 查看信息
docker network inspect mynet
# 把容器放在自己的网络中----可以通过 IP 或容器名字 ping 通
docker run -d -P --name tomcat01 --net mynet tomcat
docker run -d -P --name tomcat02 --net mynet tomcat
# 连接到另一个容器
docker network connect mynet tomcat01
4.x 实例
4.x.1 MySQL 数据同步
docker pull mysql:5.7
# 官方实例: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# -e 环境配置
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_test1 mysql:5.7
安装 MYSQL:8.0
docker pull mysql:8.0
docker run -p 3306:3306 --name mysqltest1 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 # 必须设置密码,否则启动无法启动
# 进入 Mysql 容器
mysql -u root -p 123456
use mysql;
select host,user,authentication_string,plugin from user; # 查看加密方案---plugin
alter user 'root'@'%' identified with mysql_native_password by '123456'; # 修改加密方案为: mysql_native_password
alter user 'root'@'%' identified by '123456' password expire never;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';# 解决错误--1045
flush privileges; # 更新权限
修改加密方案,否则用 Navicat 连接是报错(2059错误)
若报错:1045 Access denied for user ‘root’@‘localhost’ (using password:YES)
# 解决方案
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
MySQL 修改密码
use mysql;
UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
FLUSH PRIVILEGES;
4.x.2 PostgreSQL----PostGSI
# postgresql
docker pull postgres:12
docker run --name postgreSQL_test -e POSTGRES_PASSWORD=123456 -d -p 5432:5432 -v /home/postgresql:/var/lib/postgresql/ postgres:12
安装带有 PostGIS 的 PostgreSQL
docker pull kartoza/postgis:13.0
docker run --name=postgis -d -e POSTGRES_USER=postgres -e POSTGRES_PASS=postgres -e POSTGRES_DBNAME=gis -e ALLOW_IP_RANGE=0.0.0.0/0 -p 15432:5432 -v /home/postgis:/var/lib/postgresql --restart=always kartoza/postgis:13.0
4.x.3 基于 CentOS 构建一个镜像
- 编写 dockerfile 文件
FROM centos
MAINTAINER fengyuaho<953598751@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash
- 通过命令构建 最后有一个点
docker build -f 'file' -t '镜像名':[TAG] . # -f:文件路径 -t:镜像:【TAG】
# docker build -f mydockerfiel_centos -t mycentos:0.1 .
4.x.4 构建 Tomcat 镜像
- 准备 Tomcat 和 JDK 压缩包
- 创建 Dockerfile 文件
FROM centos
MAINTAINER fengyuaho<953598751@qq.com>
COPY read.txt /usr/local/read.txt
ADD jdk-8u271-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.40.tar.gz /usr/local/
/home/mydockerimage/readme.txt
RUN yum install -y vim
ENV MYPATH /usr/local/
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/dt.jat:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.40
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.40
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.40/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.40/logs/catalina.out
- 镜像构建(最后有一个点)
docker build -t mytamcat:0.1 .
- 启动自定义的 Tomacat
docker run -d -p 8083:8080 --name mytomcat--01 -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.40/webapps/test -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.40/logs mytomcat:0.1
持续更新…