一、Docker介绍 [官网:https://www.docker.com]
引用知乎@刘允鹏回答:Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
Docker及系统版本
Docker 使用Go 编程语言编写,并利用 Linux 内核的多个特性来提供其功能。Docker 使用一种称为容器namespaces
的技术来提供隔离的工作空间。当您运行容器时,Docker 会 为该容器创建一组命名空间。
这些命名空间提供了一层隔离。容器的每个方面都在单独的命名空间中运行,并且其访问仅限于该命名空间。
- Client(客户端):是Docker的用户端,可以接受用户命令和配置标识,并与Docker daemon通信。
- Images(镜像):是一个只读模板,含创建Docker容器的说明,它与操作系统的安装光盘有点像。
- Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象。
- Registry(仓库):是一个集中存储与分发镜像的服务。最常用的Registry是官方的Docker Hub 。
Docker从17.03版本之后分为CE(Community Edition: 社区版)和EE(Enterprise Edition: 企业版)。相对于社区版本,企业版本强调安全性,但需付费使用。这里我们使用社区版本即可。Docker支持64位版本的CentOS 7和CentOS 8及更高版本,它要求Linux内核版本不低于3.10。
本文演示使用的是阿里云免费试用的1核2GB 云服务器 ECS,CentOS8.4 系统,内核版本为4.18。
查看Linux版本的命令这里推荐两种:
lsb_release -a
或cat /etc/redhat-release
。
[root@aliyun ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 8.4.2105
Release: 8.4.2105
Codename: n/a
[root@aliyun ~]# cat /etc/redhat-release
CentOS Linux release 8.4.2105
查看内核版本有三种方式:
cat /proc/version
或uname -a
或uname -r
三种形式都可以查看到内容版本,比如:
[root@aliyun ~]# cat /proc/version
Linux version 4.18.0-305.3.1.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)) #1 SMP Tue Jun 1 16:14:33 UTC 2021
[root@aliyun ~]# uname -a
Linux aliyun 4.18.0-305.3.1.el8.x86_64 #1 SMP Tue Jun 1 16:14:33 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@aliyun ~]# uname -r
4.18.0-305.3.1.el8.x86_64
安装Docker
官方安装文档:https://docs.docker.com/engine/install/centos/
注意:更换镜像源站为阿里云
1.Docker的自动化安装
Docker官方和国内daocloud都提供了一键安装的脚本,使得Docker的安装更加便捷。
官方的一键安装方式:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
国内 daocloud一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
执行上述任一条命令,耐心等待即可完成Docker的安装。
建议初学者以手动安装为主,进行学习。
2.Docker手动安装
手动安装Docker分三步:卸载、设置仓库、安装。
2.1.卸载Docker(可选)
第一步,卸载历史版本。这一步是可选的,如果之前安装过旧版本的Docker,可以使用如下命令进行卸载:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum
可能会报告您没有安装这些软件包。
/var/lib/docker/
卸载 Docker 时,不会自动删除存储的映像、容器、卷和网络。
2.2. 安装必要的一些系统工具
在设置仓库之前,需先安裝所需的软件包。yum-utils提供了yum-config-manager,并且device mapper存储驱动程序需要device-mapper-persistent-data和lvm2。
yum install -y yum-utils device-mapper-persistent-data lvm2
2.3. 设置源仓库
- 使用官方源地址:
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
仓库设置完毕,即可进行Docker的安装。
2.4.Docker安装
执行一下命令,安装最新版本的 Docker Engine-Community 和 containerd。
-
执行缓存
yum makecache fast
-
执行安装最新社区版docker
yum install docker-ce
docker-ce为社区免费版本。稍等片刻,docker即可安装成功。但安装完成之后的默认是未启动的,需要进行启动操作。
- 如需要docker-ce-cli或containerd.io或docker-buildx-plugin 或 docker-compose-plugin可执行如下命令:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
如果提示接受 GPG 密钥,请验证指纹是否匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
,如果匹配,则接受。
此命令会安装 Docker,但不会启动 Docker。它还创建一个 docker
组,但是默认情况下不会将任何用户添加到该组。
- 要安装特定版本,请首先列出存储库中的可用版本:
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:24.0.0-1.el8 docker-ce-stable
docker-ce.x86_64 3:23.0.6-1.el8 docker-ce-stable
<...>
返回的列表取决于启用的存储库,并且特定于您的 CentOS 版本(.el8
在本示例中由后缀表示)。
通过完全限定的包名称安装特定版本,即包名称 ( docker-ce
) 加上版本字符串(第二列),并用连字符 ( -
) 分隔。例如,docker-ce-3:24.0.0-1.el8
.
替换<VERSION_STRING>
为所需的版本,然后运行以下命令进行安装:
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
此命令会安装 Docker,但不会启动 Docker。它还创建一个 docker
组,但是默认情况下不会将任何用户添加到该组。
至此,完成Docker安装。
3.Docker启动
3.1.启动Docker的命令:
systemctl start docker
或
service docker start
#设置开机自启命令
systemctl enable docker
#查看docker版本命令
docker version
Docker 找不到/etc/docker/daemon.json
。systemctl start docker
报错问题解决
[root@aliyun ~]# systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
于是访问官网:docker官网配置deamon
看到下面一句话:
To configure the Docker daemon using a JSON file, create a file at /etc/docker/daemon.json
on Linux systems, or C:\ProgramData\docker\config\daemon.json
on Windows. On MacOS go to the whale in the taskbar > Preferences > Daemon > Advanced.
翻译一下就是:使用json配置 Docker daemon,请在linux系统创建/etc/docker/daemon.json。
vim /etc/docker/daemon.json
按i写入下面内容:
{
"registry-mirrors": ["https://elzciopd.mirror.aliyuncs.com"]
}
按esc 键入:wq保存退出
# 重载配置
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker
3.2.通过运行镜像来验证Docker Engine安装是否成功 hello-world
。
sudo docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条确认消息并退出。
除了启动Docker,一些其他启动相关的命令:
- 安装校验:
docker version
- 守护进程重启:
systemctl daemon-reload
- 重启Docker服务:
systemctl restart docker / service docker restart
- 关闭Docker服务:
docker service docker stop / docker systemctl stop docker
4.刪除docker
删除安装包:
yum remove docker-ce
删除镜像、容器、配置文件等内容:
rm -rf /var/lib/docker
5.Docker其他常见命令
安装完成Docker之后,这里汇总列一下常见的Docker操作命令:
-
搜索仓库镜像:docker search 镜像名
-
拉取镜像:docker pull 镜像名
-
查看正在运行的容器:docker ps
-
查看所有容器:docker ps -a
-
删除容器:docker rm container_id
-
查看镜像:docker images
-
删除镜像:docker rmi image_id
-
启动(停止的)容器:docker start 容器ID
-
停止容器:docker stop 容器ID
-
重启容器:docker restart 容器ID
-
启动(新)容器:docker run -it ubuntu /bin/bash
-
进入容器:docker attach 容器ID或docker exec -it 容器ID /bin/bash,推荐使用后者。
更多的命令可以通过docker help命令来查看。 -
Docker 常用命令
拉取镜像 docker pull 删除容器 docker rm <容器名 or ID> 查看容器日志 docker logs -f <容器名 or ID> 查看正在运行的容器 docker ps(docker ps -a # 为查看所有的容器,包括已经停止的) 删除所有容器 docker rm $(docker ps -a -q) 启动指定容器、停止指定容器、杀死指定容器 docker start <容器名 or ID> # 启动容器;docker stop <容器名 or ID> # 停止容器;docker kill <容器名 or ID> # 杀死容器 查看所有镜像 docker images 拉取镜像 docker pull <镜像名:tag>eg:以下代码 docker pull sameersbn/redmine:latest 后台运行 docker run -d eg:docker run -d -p 127.0.0.1:33301:22 centos6-ssh 暴露端口一共有三种形式进行端口映射 docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口eg:docker -p 127.0.0.1:3306:3306 映射本机3306端口到容器的3306端口 docker -p ip::containerPort # 映射指定地址的任意可用端口到容器端口eg:docker -p 127.0.0.1::3306 映射本机的随机可用端口到容器3306端口 docer -p hostPort:containerPort # 映射本机的指定端口到容器的指定端口eg:docker -p 3306:3306 # 映射本机的3306端口到容器的3306端口 映射数据卷 docker -v /home/data:/opt/data(这里/home/data 指的是宿主机的目录地址,后者则是容器的目录地址)
6.安装Docker可视化管理工具Portainer
6.1搜索镜像
docker search portainer
6.2拉取镜像
#拉取镜像命令
docker pull portainer/portainer
#查看镜像命令
docker images
6.3运行镜像(启动Portainer容器)
#创建数据卷
docker volume create portainer_data
#启动容器
docker run -d -p 9000:9000 --restart=always --name prtainer -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
#查看启动中的容器
docker ps
启动参数说明:
-it 输出容器命令行的内容 即容器的自身的程序输出在控制台 有点类似前台运行
-d 和it相反 隐藏后台运行
-p 端口映射 9000::9000 外部(宿主机)端口:镜像里面运行的端口 将宿主机9000端口映射到镜像里面的9000端口
--restart 重启方式:always跟随docker自启
--name 启动后的容器名称
-v 挂载容器数据卷
--network 连接到某个网络(例如:--network test_net)
--network-alias 容器的网络名称(例如:--network-alias portainer)
6.4访问Portainer客户端
访问地址:http://服务器公网ip:9000,首次访问需要设置admin管理员登录密码
登录页
开始使用
控制台
容器管理
注意:要设置阿里云服务器放行端口9000