Docker相关知识

本文详细介绍了Docker的基础知识,包括镜像与容器的区别,Dockerfile的编写,如何编译生成镜像,以及容器的创建、启动、管理等操作。此外,还讲解了Docker命令的使用,如查看容器状态、资源占用情况,以及镜像和容器的导入导出等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、docker镜像,容器的区别

镜像和容器就像编程里面的类和实例的关系,镜像是静态的,容器是动态的,也即是运行起来的

二、docker镜像制作

首先为啥要自己制作,网上不是有很多docker镜像吗? 不适合或者感觉不安全

a、制作流程

        1)创建工作目录,后面所有的工程文件都放置在这个目录下,可以有子目录

 ~/docker/helloworld
|-- Dockerfile
|-- helloworld.go
`-- test
    `-- test.go

        2) 编写Dockerfile文件

               Dockerfile文件是用于制作docker镜像的脚本文件,里面都是docker内置命令,例如:指定基础镜像、安装依赖的软件、配置环境变量等,具体可以查询官方手册

# 使用官方提供的 Go 镜像作为基础镜像,基础镜像可以通过docker search 进行查询

FROM golang

# 将工作目录设置为 /myproject (对应到虚拟进程中就是/myproject目录,可以通过attach或者docker exec 命令进入虚拟进程中查看)

WORKDIR /myproject

# 将当前目录下的所有内容复制到 /myproject 下

COPY . /myproject

# 允许宿主机访问容器的 8000 端口

EXPOSE 8080

# 设置容器进程为:go run helloworld.go

CMD go run helloworld.go

3)编译生成镜像

cd 到步骤1中创建的工作目录

docker build -t helloworld .

#编译指定版本镜像(注意结尾一定要加. 代表当前目录)

docker build -t helloworld:1.0 .  

#列出本地镜像

docker images

4)创建并启动容器

docker run -d --name myhello -p 8080:8080 helloworld:1.0  

参数选项:
-i    以交互模式运行容器,通常与 -t 同时使用
-t    启动容器后,为容器分配一个命令行,通常与 -i 同时使用
-v    目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
-d    守护进程,后台运行该容器
-p    指定端口映射,格式:主机(宿主)端口:容器端口
-P    随机端口映射,容器内部端口随机映射到主机的端口(49153起始 49153到65535)
-u    以什么用户身份创建容器
–name “nginx-lb”    容器名字
-m, --memory bytes    设置容器使用内存最大值
-h, --hostname string    指定容器的 host name
–dns 8.8.8.8    指定容器 dns 服务器
-e username=“ritchie”    设置环境变量
–restart Docker    重启后,容器是否自动重启
–privileged    容器内是否使用真正的 root 权限

5)相关的docker命令

查看容器状态

docker ps -a

关闭/启动/重启 容器

docker stop/start/restart ContainerID 

进入后台运行的容器

#连接到正在运行中的容器

docker attach containerID

docker exec -it containerID /bin/bash

查看容器相关的资源占用情况

docker stats

查看容器中运行的进程情况

docker top containerID

查看容器所有相关的配置信息

docker inspect containerID

 查看容器日志

docker logs containerID 

查看容器的端口映射情况

docker port  containerID 

6)镜像/容器的导入导出

差异:

docker save 是保存镜像,有commit记录,可以支持多个镜像打包,因为有记录,所以大小偏大

docker export 是保存容器,没有记录

保存导出:

docker save -o golang_hello.tar helloworld:1.0

docker export containerID > golang_hello.tar

docker import可以为镜像指定别名,load不可以

导入还原:

docker import [options] file|URL|- [REPOSITORY[:TAG]]

docker import golang_hello.tar 

docker import golang_hello.tar - golang:1.0

docker load -i  golang_hello.tar 或者 docker load < golang_hello.tar 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值