因近期项目出现短暂的空档期,所以学习了一下.Net 6框架部署到Docker中,踩了不少坑,仅以此记录,希望可以帮到同行。
因为我也是这块的初学者,参考了一些其他大佬的文档(https://www.cnblogs.com/leonliuo/p/16356494.html),若文章中出现冒犯的烦请联系我,我尽快处理,同时里面有一些命令我暂时也说描述不出来,后期慢慢补充,勿喷。
一、环境和版本
1、Linux
2、Docker
3、远程链接使用powershell ssh
输入密码时,密码不会显示,输入完成直接回车进入远程服务器
4、文件上传工具(winSCP)-xftp
二、安装依赖包
1、依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2、设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装Docker-CE(Docker Community Edition)属于社区免费版,属于Docker引擎
sudo yum install docker-ce
三、Docker使用
1、启用、停止
sudo systemctl enable docker –开机启动
sudo systemctl start docker-启用服务
systemctl stop docker 停止docker服务
2、为 Docker 建立用户组
docker 命令与 Docker 引擎通讯之间通过 UnixSocket ,但是能够有权限访问 UnixSocket 的用户只有 root 和 docker 用户组的用户才能够进行访问,所以我们需要建立一个 docker 用户组,并且将需要访问 docker 的用户添加到这一个用户组当中来。
1. 建立 Docker 用户组
sudo groupadd docker
2. 添加当前用户到 docker 组
sudo usermod -aG docker $USER
3、构建Docker镜像和容器
镜像:sudo docker build -t mydockertest .(需要注意切换到项目目录下面:cd /文件夹名称)
查看镜像:docker images
容器:docker run --name webapitest -p 9000(外部端口):9000(容器内部端口) mydockertest
注意事项:因vs在建立项目时会默认端口号,所以我们需要在Program.cs中处理一点代码,用于指定端口,并且此端口需要和dockerfile端口以及容器内部端口保持一致
查看容器: docker ps -a
启动容器:docker start 容器ID
容器若启用正常:可使用curl ip:端口访问地址
四、Docker常用命令
docker ps --查看目前正在运行的所有容器 -a 显示包括已经停止的容器
docker pull --拉取镜像
docker rmi --删除镜像 后面可以直接根据镜像 名称或者tag 前首字母匹配
docker start container_id --打开容器 (这里可以是容器id或名称)
#删除单个镜像
docker rmi -f <镜像id>
docker stop container_id --停止容器 (这里可以是容器id或名称)
docker rm --删除容器(只有停止的容器才可以删除)
docker build --使用 Dockerfile 创建镜像
docker exec --容器中执行命令,例如:docker exec -it container_id(容器名或id) /bin/bash (bin/bash要执行的命令或工具)
docker logs --查看 容器日志 ,例如:docker logs -f -t --tail 10 container_id (容器名或id)
四、Linux和iptables相关
因为在使用过程中需要配置Linux相关关键和iptables相关设置,所以涉及到一些命令
1、Linux
查看端口是否被占用
netstat -tunlp | grep 9000
显示所有端口和进程
netstat -anp | grep 8080
netstat -ntlp | grep 8080
查看防火墙状态
firewall-cmd --state
停止防火墙
systemctl-cmd stop firewalld
2、iptables
保存防火墙规则:iptables-save >/opt/iptables.bak
清除防火墙规则:iptables -F ; iptables -F -t nat ;
恢复防火墙规则:iptables-restore</opt/iptables.bak
指向:iptables -L
启用端口
iptables -AINPUT -ptcp --dport 8080-jACCEPT
清空规则
iptables –F
查看所有规则
iptables –nL
docker固定容器ip设置net为none(此处是由于云服务器端口无法使用,可执行此命令)
iptables -t nat -I PREROUTING -p tcp --dport 端口号 -m state --state NEW -j ACCEPT