Docker 学习笔记以及可能用到的一些实例

Docker

Docker Hub

Docker Docs

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 的 ip地址修改配置文件

  • 转发到多个 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

持续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值