安装 docker (1.安装docker,2.启动docker服务 3.开机自动启动docker服务)
1 yum install docker
2 systemctl start docker.service
3 systemctl enable docker.service
拉取.net core3.1的镜像:docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
安装MySql
安装版本:docker pull mysql:5.7
默认安装:docker pull mysql
运行,注意指定镜像版本:mysql:5.7
docker run -d -p 3306:3306 --name mysql-test -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7
问题1:开启容器的时候报错 mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 13 - Permission denied
关闭SELinux,安全增强型Linux(Security-Enhanced Linux)简称SELinux,它是一个 Linux 内核模块,也是Linux的一个安全子系统。为了避免安装过程出现各种错误,建议关闭。
查看SELinux状态
[root@localhost ~]# /usr/sbin/sestatus
SELinux status: disabled[root@localhost ~]# getenforce
Disabled
容器互联coreapi连接mysql
由于容器之间互相隔离,容器之间通信需要搭建网桥
1,创建network,用于连接mysql容器和api容器
docker network create -d bridge my-network #-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode
2、创建启动api容器,指定对应的network
docker run -d -p 8084:3827 --network my-net --name myuserapi userapi:prod #myuserapi 容器名称 userapi:prod镜像名称 本机端口8084,容器监听端口3827
3、由于mysql01容器并没有加入到该网络连接,api容器依然无法访问。下面将mysql01添加到my-net中来
docker network connect my-net mysql01 #mysql01容器添加进网络my-net
docker network disconnect my-net mysql01 #从网络中移除
4、查看两个容器是否在同一网段
docker inspect myuserapi #myuserapi 容器名称
docker inspect mysql01 #mysql容器
部署.Net Core项目
VS2019自动生成的Dockerfile需要放到上一级项目目录,也就是解决方案的sln目录
基于Dockerfile创建镜像
docker build -t core31v1.827 -f Dockerfile . #注意后面有点,需要进入到当前目录运行
docker run -itd -p 5726:80 core31v1.827 #根据镜像创建容器实例,-itd设置后台运行
Dockerfile内容如下:
#拉取runtime父镜像,运行aspnet core应用必须要用runtime FROM microsoft/dotnet:2.2-aspnetcore-runtime #设置容器工作目录 WORKDIR /DockerDemo #把当前目录的所有文件copy到工作目录中 COPY . /DockerDemo #暴露一个端口让外部可以访问 EXPOSE 8080 #容器入口命令,即容器启动时执行dotnet DockerDemo.dll命令 ENTRYPOINT ["dotnet", "DockerDemo.dll"]
简单说明
Dockerfile常用指令: #FROM:通常情况下,我们创建的镜像时基于另外一个镜像的,这时就要用FROM,当然我们也可以完全从头创建 #WORKDIR:设置容器的工作目录 #MAINTAINER:该镜像的维护人 #COPY:经常需要把源码复制到容器中,只用COPY就可以实现这一点 #RUN:这里可以定义一些需要运行的命令,执行的目录是WORKDIR。如npm install ,dotnet restore,dotnet run等 #ENTRYPOINT:定义容器的入口,通常是一些dotnet/node等命令,如dotnet xxx.dll #CMD:设置容器运行的默认命令和参数,即容器启动时执行的命令。当容器运行时,可以通过命令行覆盖CMD定义的命令 #EXPOSE:暴露端口 #ENV:设置环境变量
安装docker-compose
[root@localhost ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@localhost ~]# sudo chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose --version
docker挂载配置外部文件部署Nginx
docker run -d -p 8086:80 -v /0827/config/nginx/:/var/log/nginx/ -v /0827/config/nginx/nginx.conf:/etc/nginx/nginx/nginx.conf -name elnginx nginx
-v /0827/config/nginx/:/var/log/nginx/ #目录挂载
-v /0827/config/nginx/nginx.conf:/etc/nginx/nginx/nginx.conf #文件挂载
docker关闭所有容器实例
docker stop $(docker ps -q) & docker rm &(docker ps -aq) #停止实例,然后删除所有实例
docker rm $(docker ps -aq) #删除所有容器实例
docker rmi -f $(docker images -q) #删除所有镜像
docker使用 Dockerfile 构建镜像时遇到的问题
运行 dockerfile 时报出的错误
[root@localhost Pisces.CoreAPI]# docker build -t coreapiv1.1 -f Dockerfile .
Error parsing reference: "mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base" is not a valid repository/tag: invalid reference format
这个问题一般是由 docker 的版本错误导致的
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base, 使用 docker 的新特性 multi-stage build, 该特性要求 docker 17.05 或更高版本.
我使用的服务器版本是 CentOS 7.5 , 默认安装 docker 安装的 docker 1.13.1 版本
下面将 docker 更新到最新版本
删除已安装的 docker 版本 ~~~~
yum -y remove docker* (不删除 /var/lib/docker 目录 就不会删除已安装的镜像及容器)
安装国内阿里云镜像
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start