Centos7 Docker使用学习

安装 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值