学习Docker?看这篇足够了!

150 阅读5分钟

认识docker

Docker是一个开源的应用容器引擎,基于go语言开发

Docker可以让开发者打包应用以及依赖包到一个轻量的,可移植的容器中,可以发布到任何linux容器中,也可以实现虚拟化。

容器是完全沙箱机制,也就是盲盒,相互之间无法有任何接口,并且容器的开销很低

应用场景

在开发一个应用的时候,为了克服每台电脑运行环境不同,导致程序水土不服,,docker可以将应用程序,运行环境等等全部打包成一个容器,这个容器可以放到任何机器上面,使得里面的应用程序可以正常运行。

优点:1.安全2.开销低3.部署简单.

基本概念和架构

Docker就是一个可以容器化管理和部署我们应用程序的很强大的引擎。学习之前我们需要了解三个基本的概念

1.镜像(image) :Docker镜像,就相当于是一个root文件系统

2 .容器(Container) :镜像和容器的关系。就像是类和实例,镜像是静态的定义,容器是镜像运行的实体,容器可以被创建,启动,停止,暂停,删除

3.仓库(Repository) :仓库是一个代码控制中心,用来保存镜像,也就是DOCKER HUB

Docker官方架构如下

image-20220711205809467

上述:

  • Client 表示操作者,例如我们通过远程SSH连接自己的服务器

  • DOCKER_HOST
    

    我们运行Docker容器的服务器

    • Docker daemon docker引擎守护进程,在后台运行,起着运行和管理所有容器的作用
    • Containers和Images 即为上述所说的容器和镜像,镜像和容器就类似与类和对象的关系,或者是模板和实体的关系
  • Registry 镜像仓库,服务器上的镜像哪里来的呢?大多数是从官方的仓库拉下来的,仓库就是专门存放镜像的地方,当然你也可以自己制作镜像并上传至仓库

Doker的安装

Docker分为两个版本,社区版和企业版,我们学习用社区版就行

Docker有很多产品,比如Docker Desktop,Docker Engine,前者是可视化的管理docker容器的程序,后者是核心,学习的话建议是用Docker Engine,也是命令行来操作

1.安装步骤

1.如果你之前弄过docker,先删掉残余软件包

sudo apt remove docker docker-engine docker.io containerd runc
sudo apt install ca-certificates curl gnupg lsb-release

3.添加密钥并加入官方仓库

如果你的服务器在国内

sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4.执行安装

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成

docker -v

image-20221003143458717.png

没报错说明成功

配置仓库镜像源

由于我们镜像都是从官方拉去的,但是官方仓库在国外,因此我们需要在国内服务器配置一下自己的地址

由于我用的腾讯云

是跟着官方文档配置的,几行命令,很简单,全部cv即可

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

检查加速器是否生效

docker info

看到这个就说明配置成功

image-20221003144123177.png

阿里云也一样,搜一下百度都有,直接cv就可,不必太过纠结

Docker引擎服务常用命令

安装完docker后,默认docker守护进程就已经运行起来了

日常如果想操作这个守护进程可以通过下面的一些命令来完成

1)启动,停止,重启

# 启动Docker守护进程
sudo systemctl start docker
# 停止docker守护进程
sudo systemctl stop docker
# 重启Docker 守护进程
sudo systemctl restart docker

2) 开机自启动

# 设定Docker守护进程开机自启
sudo systemctl enable docker
# 禁用Docker 守护进程开机自启
sudo systemctl disable docker

官方文档

后面我们就要来正式学习Docker的使用了!当然和其它框架、工具、语言一样,有困难大家还是应当多参考官方文档:

镜像基本操作

通过之前的学习,我们知道,在使用容器之前,我们需要镜像,有了镜像才能创建容器

1)查看镜像

docker images

image-20221003153014804.png

现在没有安装 镜像,所以是空的

  • REPOSITORY 表示镜像的仓库源
  • TAG 镜像的版本
  • IMAGE ID 镜像ID
  • CREATED 镜像创建时间
  • SIZE 镜像大小

软件的镜像事实上也是系统镜像中配置好其环境和软件制作而成的。

2)搜索和获取镜像

如何去找镜像呢?

去官网:hub.docker.com/

注册完以后,比如搜索一个mysql镜像,左上角就可以进行搜索了

之后点进去

image-20221003153537678.png

右边有个docker pull mysql,就是拉取mysql镜像

image-20221003153547301.png

# 拉取最新版
docker pull 镜像名
​
# 拉取指定版本
docker pull 镜像名:指定版本

一般用mysql 5.7

docker pull mysql:5.7

3)删除镜像

先查看 docker images

image-20221003153827557.png

如果要删除镜像

docker rmi c20987f18b13  //镜像id

同样使用敬香茗也可以

2.容器的基本操作

1)容器的创建和运行

现在有了镜像,我们如何去创建一个容器呢?

去 docker hub上找命令

image-20221003155122241.png

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=你的密码 -d mysql:5.7

image-20221003155142374.png

返回这个说明成功了

之后docker ps

image-20221003155206785.png

确实是有容器再跑

上述字段意义:

  • CONTAINER ID 容器的ID,可以用于操作这个容器
  • IMAGE 容器所属镜像
  • COMMAND 容器中正在执行的命令
  • CREATED 容器创建时间
  • STATUS 容器状态,Up表示正在运行,Exited表示容器已停止
  • PORTS 容器端口,目前没设定网络端口
  • NAMES 容器名

可见容器,通过STATUS可以观察容器的状态

4) 已存在的容器的启动和停止

先docker ps -a

找到所有正在运行的和已经停止的容器

然后重启已经停止的容器

docker start 161f3c1fd195

除此之外,还有停止和重启容器命令:

# 停止一个容器
docker stop ID/容器名
# 重启一个容器
docker restart ID/容器名

删除容器

docker rm ID/容器名

查看容器信息

docker inspect ID/容器名

docker inspect 0 是查看所有

容器的导入导出

docker export 容器id > /root/mysql-1.tar

image-20221003155922261.png

看第一个,就是容器导出的tar文件

如果我们想把这个保存的状态导入,那么执行

docker import /root/mysql-1.tar mymysql2,0

image-20221003160138805.png

第一个就是我们导入的

再docker run就可以启动这个镜像啦

\