Docker | 青训营

2023年 8月 29日 50.6k 0

初识Docker

为什么要用Docker

大型项目组件较多,运行环境也很复杂,部署时可能会遇到以下问题:

  • 依赖关系复杂,兼容问题频发
  • 开发、测试、生产环境有差异

Docker是怎么解决的?

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免相互干扰
  • Docker镜像中包含完整运行环境,包括系统函数库

镜像和容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见

DockerHub:DockerHub是一个Docker镜像的托管平台,这样的平台称为Docker Registry

Docker架构

Docker是一个C/S架构的程序,包含两部分:

  • 服务端:Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端:通过命令或RestAPI向Docker服务端发送指令,可以在本地或远程向服务端发送指令

Docker安装示例

卸载

如果之前安装过旧版本Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

安装Docker

安装yum工具

yum install -y yum-utils \
            device-mapper-persistent-data \
            lvm2 --skip-broken

更新本地镜像源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g'
/etc/yum.repos.d/docker-ce.repo

yum makecache fast

输入命令:

yum install -y docker-ce

启动Docker

Docker应用需要用到各种端口,逐一去修改防火墙设置非常麻烦,可以关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

通过命令启动docker

systemctl start docker
systemctl stop docker
systemctl restart docker

Docker基本操作

镜像相关命令

  • 镜像名称一般分两部分:[repository]:[tag]
  • 在没有指定tag时,默认是latest,代表最新版本的镜像

编写Dockerfile

要创建Docker镜像(image)必须在配置文件中指定步骤。这个文件默认我们通常称之为Dockerfile,示例代码如下:

FROM golang:alpine

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 移动到工作目录:/build
WORKDIR /build

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件app
RUN go build -o app .

# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist

# 将二进制文件从 /build 目录复制到这里
RUN cp /build/app .

# 声明服务端口
EXPOSE 8888

# 启动容器时运行的命令
CMD ["/dist/app"]

From

可以使用基础镜像golang:alpine来创建镜像。

Env

用来设置我们编译阶段需要用的环境变量。

WORKDIR

移动到工作目录

COPY

将代码复制到容器中

RUN

RUN go build -o 将我们的代码编译成二进制可执行文件app

RUN cp 将二进制文件从一个目录复制到这里

EXPORT

声明服务端口,因为我们的应用程序监听的是这个端口并通过这个端口对外提供服务。

CMD

定义了在我们运行镜像的时候默认执行的命令CMD ["/dist/app"]

构建镜像

在项目目录下,执行下面的命令创建镜像,并指定镜像名称为myImage

docker build . -t goweb_app

执行下面的命令运行镜像:

docker run -p 8888:8888 myImage

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论