当前位置: 首页 > 工具软件 > docker-book > 使用案例 >

笔记:Docker

萧秋月
2023-12-01

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

 类似资料: