Docker 容器 基于 go 语言开发 容器之间相互隔离
官网:https://www.docker.com 镜像仓库地址:https://hub.docker.com
从入门到卸载 安装帮助文档:https://docs.docker.com/engine/install
#卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
#阿里云镜像安装
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum索引
yum makecache fast
#安装最新版本docker ce为社区 ee是企业
yum install docker-ce docker-ce-cli containerd.io
#PS:如果安装不成功检查防火墙试试 其实主要是安装时没打 y 命令
#查看防火墙状态:firewall-cmd --state
#关闭防火墙:systemctl stop firewalld.service
#禁止开机启动:systemctl disable firewalld.service
# 启动后 设置docker阿里云镜像加速
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#启动
systemctl start docker
#查看版本
docker version
#运行 hello-world 镜像
docker run hello-world
#查询docker镜像
docker images
#卸载docker 只做记录兄弟们别真删哈
#卸载镜像:yum remove docker-ce docker-ce-cli containerd.io
#删除镜像:rm -rf /var/lib/docker
#删除容器:rm -rf /var/lib/containerd
# docker启动
systemctl start docker
# docker 停止
systemctl stop docker
# 重启 docker
systemctl restart docker
#启动容器
docker start e73346bdf465
#重启容器
docker restart e73346bdf465
#停止容器
docker stop e73346bdf465
#杀死容器
docker kill e73346bdf465
#查看应用版本
docker image inspect redis | grep -i version
#查看 docker cpu 状态
docker stats
### docker日志路径
var/lib/docker/containers/ -name *-json.log
常用命令 帮助文档:https://docs.docker.com/reference
#查看版本
docker version
#查看信息
docker info
#帮助
docker 命令 --help
#HF镜像命令
#查看镜像
docker images -aq
#搜索镜像
docker search mysql
#拉取镜像 不写 tag 默认安装最新版本
docker pull mysql:5.7
#删除镜像
docker rmi -f e73346bdf465
#删除所有
docker rmi -f $(docker images -aq)
#容器命令
#拉取centos基本镜像
docker pull centos
#运行
docker run [可选参数] name
-d 后台方式运行
-it 使用交互方式运行 进入容器查看内容
-p 指定容器端口绑定 -p 8080:8080
#启动并进入容器
docker run -it contos /bin/bash
#退出停止容器:exit 退出不停止:Ctrl + P + Q
#列出运行中的容器
docker ps
-a 历史运行过的容器
-p 只显示容器的编号
#删除容器 -f 强制删除
docker rm -f e73346bdf465
#删除所有
docker rm -f $(docker ps-aq)
#删除所有方式
docker ps -a -q|xargs docker rm -f
#删除 none 镜像
docker rmi $(docker images | grep "none" | awk '{print $3}')
#启动容器
docker start e73346bdf465
#重启容器
docker restart e73346bdf465
#停止容器
docker stop e73346bdf465
#杀死容器
docker kill e73346bdf465
#进阶命令
#查看日志
docker logs -f -t --tail 500 e73346bdf465
#查看容器中的进程信息
docker top e73346bdf465
#查看容器信息
docker inspect e73346bdf465
#进去当前正在运行的容器 开启新终端
docker exec -it e73346bdf465 /bin/bash
#进去当前正在运行的容器 正在执行 [这个不太稳]
docker attach e73346bdf465
#从容器内拷贝文件 到服务器
docker cp reis:/data/redis.conf /home/docker/redis
#从服务器拷贝文件到容器中
docker cp /home/docker/redis/redis.conf e73346bdf465:/data
实战 NGINX
#搜索镜像
docker search nginx
#拉取镜像
docker pull nginx
#启动NGINX
docker run -d --name nginx -p 80:80 -p 443:443 nginx
#运行测试
curl localhost:80
#进入NGINX
docker exec -it nginx /bin/bash
#查看文件
whereis nginx
#进入配置目录
cd etc/nginx
# docker nginx 的配置路径
/etc/nginx/nginx.conf
# 退出后 将配置文件复制出来
docker cp nginx:/etc/nginx/nginx.conf /home/dockerfile/nginx
# 修改将配置文件复制进去
docker cp /home/dockerfile/nginx/nginx.conf nginx:/etc/nginx
# docker 启动 nginx
docker run -d --name nginx -p 80:80 nginx
# 进入 nginx 查看
docker exec -it nginx /bin/bash
# 将 nginx 打包成 nginx-hf 新镜像
docker commit -a="hf" -m="remark" nginx nginx-hf
# 用 docker 集群部署 nginx
docker service create --name nginx-hf -p 80:80 --replicas 4 nginx-hf
# 扩容或缩容
docker service scale nginx-hf=2
# 删除集群
docker service rm nginx-hf
实战 ES
### max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
### 错误解决 添加如下配置
vim /etc/security/limits.conf
* soft nofile 200000
* hard nofile 200000
### 保存后重启
### max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
### 错误解决
vim /etc/sysctl.conf
vm.max_map_count=655360
### 保存后执行
sysctl -p
### 然后重启ES
docker restart ES01
### 编写配置文件 只需修改 node.name 即可
cluster.name: "docker-cluster"
network.host: 0.0.0.0
node.name: esnode00
node.master: true
node.data: true
discovery.zen.minimum_master_nodes: 1
discovery.seed_hosts: ["192.168.81.132:9300", "192.168.81.132:9301", "192.168.81.132:9302"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
cluster.initial_master_nodes: ["esnode00", "esnode01", "esnode02"]
http.cors.enabled: true
http.cors.allow-origin: "*"
### 启动 esnode00
docker run -d -p 9200:9200 -p 9300:9300 --privileged=true -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TAKE_FILE_OWNERSHIP=true --name esnode00 elasticsearch:7.5.2
### 将编写好的文件复制到容器后 重启
docker cp /home/dockerfile/elasticsearch/elasticsearch.yml esnode00:/usr/share/elasticsearch/config
### 启动 esnode01
docker run -d -p 9201:9200 -p 9301:9300 --privileged=true -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TAKE_FILE_OWNERSHIP=true --name esnode01 elasticsearch:7.5.2
### 将编写好的文件复制到容器后 重启
docker cp /home/dockerfile/elasticsearch/elasticsearch.yml esnode01:/usr/share/elasticsearch/config
### 启动 esnode02
docker run -d -p 9202:9200 -p 9302:9300 --privileged=true -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TAKE_FILE_OWNERSHIP=true --name esnode02 elasticsearch:7.5.2
### 将编写好的文件复制到容器后 重启
docker cp /home/dockerfile/elasticsearch/elasticsearch.yml esnode02:/usr/share/elasticsearch/config
### 或者直接容器中安装 vim 编辑 不推荐
docker exec -it esnode00 /bin/bash
yum install vim
docker 可视化 portainer 备注:博主说没啥用
实战 Mysql + 容器数据卷 数据挂载
#拉取镜像
docker pull mysql:5.7
#运行容器 并进行文件挂载:指定路径挂载 并配置密码
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=password --name mysql mysql:5.7
#匿名挂载 只写容器内路径
docker run -d -p 3306:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=password --name mysql mysql:5.7
#查看所有 volume 的情况
docker volume ls
#具名挂载 只取名称
docker run -d -p 3306:3306 -v urlconf:/etc/mysql/conf.d -v urlmysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password --name mysql mysql:5.7
#查看匿名路径
docker volume inspect urlconf
dockerfile
#生成 dockerfile 文件 用于生成镜像挂载
FROM centos
VOLUE ["volume01":"volume02"]
CMD echo "END---------------"
CMD /bin/bash
#生成镜像
docker build -f /data/dockerfile -t hf/centos:1.0 .
#容器间数据挂载
docker run -it --name name02 -volumes-from name01 hf/cemtos:1.0
容器互联 + 网络连通
# --link 原理也是在 etc/hosts 进行了域名映射 不推荐使用
docker run -d -P --name tomcat1 --link tomcat02 tomcat
#自定义网络 推荐 这样可以容器网络互通 方便集群网络互通 且 不用重复配置
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#查看所有网络
docker network ls
#查看自定义网络
docker network inspect mynet
#运行时使用自定义网络
docker run -d -P --name tomcat01 --net mynet tomcat
docker run -d -P --name tomcat02 --net mynet tomcat
#ping
docker exec -it tomcat01 ping tomcat02
#网络联通 容器跟网络联通
docker network connect mynet tomcat0
SpringBoot
#Dockfile
FROM
COPY *.jar /hf.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/hf.jar"]
#将jar包 与 Dockfile 复制至 /home/idea 目录 运行
docker build -t hf .
#查看镜像
docker images
#运行镜像
docker run -d --name hf -p 8080:8080 hf
#测试连接
curl localhost:8080
redis
#拉取镜像
docker pull redis
#运行镜像
docker run -d --name redis -p 0.0.0.0:6379:6379 redis
#这里配置conf
vim
# 配置文件 /data/redis.conf
# bind 127.0.0.1 # 注释该句
protected-mode yes
requirepass yourpassword
#将配置好的 conf 复制进去
docker cp /home/dockerfile/redis/redis.conf redis:/data