0.Docker核心概念

在上篇分享中,我们聊到 Docker是一种沙盒技术,Docker容器的本质其实是一个特殊的Linux进程。它被Namespace做了隔离,资源被cgroup做了限制,

并且能看到的文件系统,也被rootfs做了手脚。那这个容器又是如何启动起来的?隔离限制的幕后操作者又是谁? 这就涉及到下面几个名称:

  • docker宿主机: 安装了Docker程序的机器(Docker直接安装在操作系统之上);
  • docker程序
  • docker仓库(Registry):用来保存各种打包好的软件镜像;
  • docker镜像(Images):软件打包好的镜像;放在docker仓库中;
  • docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

宿主机,我们很好理解,它是一个Linux机器,可以是虚拟机,但一定是Linux,因为我们谈到的Namespace等实现docker的技术,是Linux内核才有的特性。所以基于windows或者mac的docker实际上是基于一个虚拟机。docker程序,没错,就是它负责接收我们的一些docker命令,然后帮助我们创建容器,做相关的所有工作。docker镜像,就是为不同应用制作的模板,可以利用镜像快速启动容器,很多常用的镜像,比如mysql,nginx等等,在docker.hub(docker官方的镜像仓库)都有现成的镜像,你只需要拉取下来使用即可。docker容器和镜像的关系就像是,模板与实例的关系。一个镜像可以启动多个实例。

有了docker,你安装一个nginx软件只需要下面几个命令:

docker pull nginx
docker run --name mynginx -p 8080:80 -d nginx

现如今,几乎所有的软件厂商,都会为自己的应用制作Docker镜像,所以基于Docker安装的方式,让你根本不用关心软件内部的配置细节,你只需要给我一个打包好的镜像,然后我执行一句docker run即可。Docker镜像成了新的交付形式。特别是镜像的分层设计,镜像仓库等管理方式是广大开发者早已熟悉的工作模式(比如maven仓库,npm仓库,git版本管理),所以Docker成了容器事实上的标准。

1.安装Docker

1.1.安装Docker

Docker分为ce 个人,ee企业

#1.更新yum
sudo yum update -y 
#2.卸载旧版本docker(如果没有,跳过)
sudo yum remove docker  docker-common docker-selinux docker-engine
#3.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#4.设置docker yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#如果上边的源速度有问题,可以利用阿里镜像加速
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#5.安装docker由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
sudo yum install docker-ce 

#6.启动 设为开机启动,并查看状态
systemctl start docker && \
systemctl enable docker &&\
systemctl status docker


如果之前安装过,卸载不干净,会出现冲突,根据提示卸载对应的就可:

yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

如果想安装具体版本:用下面命令

#1、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
#2.安装指定版本
yum install docker-ce-19.03.9-3.el7

第一句查看版本的结果如下,安装命令要注意需要拼接成上面的形式,去掉x86以及3:等。

docker-ce.x86_64            3:19.03.10-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable

官方教程

1.2.删除Docker

docker info #查看docker信息

yum list installed | grep docker #查看docker安装信息

yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y #删除

#完全删除
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

rm -rf /etc/systemd/system/docker.service.d

rm -rf /var/lib/docker

rm -rf /var/run/docker

2.Docker常用命令

2.1.镜像操作

操作 命令 说明
检索 docker search 关键字 eg:docker search redis 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。
拉取 docker pull 镜像名:tag :tag是可选的,tag表示标签,多为软件的版本,默认是latest
列表 docker images 查看所有本地镜像
删除 docker rmi image-id 删除指定的本地镜像
导出 docker save -o xx.tar yourImage 将某个镜像导出为一个 tar文件,可以复用
导入 docker load xx.tar 导入某个镜像文件xx.tar,此时镜像列表就有该镜像

示例:拉取一个nginx镜像,版本号默认使用latest

[root@node1 docker]# docker pull nginx
[root@node1 nginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f6987c8d6ed5        4 days ago          141MB
ceph/daemon         latest              2e1ed6c0f434        2 years ago         942MB
ubuntu              latest              775349758637        2 years ago         64.2MB
redis               latest              de25a81a5a0b        2 years ago         98.2MB
ipfs/go-ipfs        latest              953c7f0ef4d8        2 years ago         51.5MB
centos              centos7.5.1804      cf49811e3cdb        2 years ago         200MB

此时通过docker images就可看到nginx镜像

2.2.容器操作

操作 命令 说明
创建并启动 docker run –name nginx -d nginx:latest 根据镜像nginx:latest启动一个名叫nginx的容器
查看容器列表 docker ps [-a] 查看启动的容器列表,加 -a 可以查看所有,包括停止的容器
停止 docker stop 容器id 停止某个容器,id可以只写前缀几个字母,只要能区分即可以,不用写全
启动 docker start 容器id 启动某个被停止的容器
删除 docker rm 容器id 删除某个容器,必须要先停止容器
查看荣器详情 docker inspect 容器id 查看摸个容器详细信息
查看日志 docker logs 容器id 查看某个容器的运行日志

示例:通过刚才获取的nginx镜像运行一个nginx容器。

[root@node1 docker]# docker run --name nginx-test -p 8080:80 -d nginx
26048046db4838582b009322972d06230f3cb31b244665a627b31db5187ed030
  • –name 用来命名容器,
  • -p 宿主机端口:容器端口 端口映射
  • -d 后台运行
  • nginx 镜像名称,一般要跟上版本号, 这里因为拉取镜像采用latest,所以可以省略版本号

下面那一串就是容器的id, 此时查看容器

[root@node1 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
26048046db48        nginx               "/docker-entrypoint.…"   4 seconds ago       Up 4 seconds        0.0.0.0:8080->80/tcp   nginx-test

此时nginx即可 访问

进入容器内部:通过exec就可以进入容器, 这里26就是容器id的前缀,可以不用写全。

[root@node1 docker]# docker exec -it 26 /bin/bash
root@26048046db48:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@26048046db48:/# cd /usr/local/
root@26048046db48:/usr/local# ls

这里 -it是告诉容器,启动后分配一个输入输出环境(-i即stdin, -t 即tty) 可以直接认为 tty 就是 Linux 给用户提供的一个常驻小程序,用于接收用户的标准输入,返回操作系统的标准输出。当然,为了能够在 tty 中输入信息,你还需要同时开启 stdin(标准输入流).

这里整个命令就是,进入容器,分配一个输入和输出环境,并且启动bash程序。

3.镜像加速

Docker 默认远程仓库:https://hub.docker.com/

我们要是从这个默认仓库下载镜像,速度是特别低慢,就几十 kb 每秒的那种;由于是国外主机,类似 Maven 仓库,经常延迟,破损;

所以我们一般都是配置国内镜像,比如阿里云镜像,稳定点;

阿里云提供了镜像加速服务,只要登录账号,就可以免费获取。

配置步骤:

1.登录阿里云账号,找到镜像加速服务

2.安照要求执行对应的命令即可

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.小结

​ 文中分享了Docker的一些核心概念,并记录了一些常用的命令,把实际使用中值得注意的点做了记录,所以涵盖了从安装到使用等一系列问题。所以并非一篇入门教程,而更像是一个学习手册。

文中关于nginx的例子,还有很多优化点,比如我的数据持久化如何做?如何方便配置?等等这些问题,后续接着分享。

发表回复

您的电子邮箱地址不会被公开。