目录
一. Docker的介绍
Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows服务器上。容器是完全使用沙箱机制(程序受控的环境),相互之间不会有任何接口(类似iPhone的app)而且更轻量级
简单来说,就是一键快速启动各种服务,快速运行项目,快速打包项目,让客户不需要安装各种环境,快速发布打包好的镜像,供客户下载使用。
docker hub就相当于手机里的应用商城,发布已经打包好了的软件,称为镜像
二. 准备工作
准备一台的服务器(默认大家有一台服务器),可以是阿里云,腾讯云等服务商,也可以用虚拟机替代
安装Docker(推荐宝塔安装)
准备条件
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
准备安装
#添加 Docker 官方 GPG key (可能国内现在访问会存在问题)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#添加 apt 源:
#Docker官方源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
sudo apt update
sudo apt-get update
安装Docker
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成
#查看Docker版本
sudo docker version
#查看Docker运行状态
sudo systemctl status docker
安装Docker 命令补全工具
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
source /etc/bash_completion.d/docker.sh
允许非Root用户执行docker 命令
当我们安装好了Docker之后,有两种方式来执行docker 命令
- 在docker命令前加上sudo, 比如:sudo docker ps
- sudo -i 切换至root用户,再执行docker 命令
是不是可以让当前用户在不切root,或者不加sudo 的情况下正常使用 docker 命令呢?答案是有的。
添加docker用户组
sudo groupadd docker
将当前用户添加到用户组
sudo usermod -aG docker $USER
使权限生效
newgrp docker
测试一下
#查看所有容器
docker ps -a
更新.bashrc文件
#如果没有此行命令,你会发现,当你每次打开新的终端
#你都必须先执行一次 “newgrp docker” 命令
#否则当前用户还是不可以执行docker命令
groupadd -f docker
关于最近国内无法访问到Docker的,首先在安装的时候,我们可以选国内阿里的源。参考上面的更新。
另外,我们需要在docker daemon 配置文件中增加国的可用的 docker hub mirror ,
找到你的daemon.json 文件,通常在 /etc/docker/daemon.json 这个位置
在daemon.json 中增加
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
如果你嫌弃手动安装麻烦的话,推荐通过宝塔面板安装docker
三. 详细介绍
docker-cli就是操控docker Daemon的命令行,通过命令来构建或启动docker镜像
Build(构建):通过docker build 命令将软件构建自己的软件包
Share(分享):通过docker pull 命令拉取别人分享的镜像,docker push 将自己的应用推送到应用市场
Run(运行):通过docker run 命令运行应用
名词解释:
镜像:就是软件包
容器:用软件包启动起来的应用,每一个运行中的应用称为一个容器
容器详细介绍
在传统部署中,应用部署在同一个操作系统上,一旦一个应用内存泄漏就会挤压其他软件的运行空间,对其他软件造成影响,在虚拟化部署中,通过虚拟化技术,通过一个个虚拟机来对应用进行隔离,但每个虚拟机都携带了操作系统,系统太过于笨重;而容器化部署就是将应用部署到容器上拥有轻量,快速,隔离,跨平台等优点,容器化技术是大势所趋
容器类似轻量级的VM
容器共享操作系统内核
容器拥有自己的文件系统、CPU、内存、进程空间等
容器互相隔离
四. Docker常见命令
以一个实验为例
大致步骤
下载镜像
检索
下载
查看本地镜像 docker images
docker pull nginx 相当于docker pull nginx:latest,也就是默认下载最新版本,如果下载指定版本,就去WeTab 新标签页 (docker.com)网站自己搜索镜像
docker.hub网站在国内已经被封禁,我开梯子也无法访问,在另一篇文章讲了如何访问docker.hub网站
删除
启动容器
运行 docker run
方式一
方式二
方式三
服务器注意放行使用的外部端口,这样就可以访问nginx的欢迎页
查看 docker ps
docker ps是查看正在运行的容器,docker ps -a查看所有的容器,包括退出的
启动 docker start
停止 docker stop
重启 docker restart
状态 docker stats
查看容器占用的CPU情况,I/O流等
日志 docker logs
删除 docker rm
两种删除方式:
1. 强制删除 docker rm -f 617
2. 普通删除,需要先stop停止容器运行 docker rm 617
进入 docker exec
一个容器就是一个小型的Linux系统,一样的操作
exit退出容器,回到主机
保存镜像
打包成镜像,分享到社区
提交 docker commit
参数说明
保存 docker save
打包成tar压缩包,可以用U盘文件形式发给别人用了
加载 docker load
别人发来一个容器压缩包,我们如何使用
1. docker load -i mynginx.tar mynginx.tar 是压缩包名字 加载这个容器
2. docker run -d --name app01 -p 80:80 mynginx:v1.0 运行容器
分享社区
由于链接超时,本次就不做代码演示
- 先再dockerhub网站进行注册登录
- 输入用户名,密码
- docker tag 改镜像名
- docker push推送镜像
可以自己搭建仓库进行推送
目录挂载 -v /app/nghtml:/usr/share/nginx/html
我们想要修改容器里面的内容,每次都要通过docker exec进入修改,十分麻烦,并且如果不小心把容器删除,修改过的内容也会不见。那么我们就使用目录挂载,也就是将容器里面的一个目录同外部服务器的一个目录相结合,修改一处,另一处也会发送变化
运行时进行目录挂载,将容器的/usr/share/nginx/html目录 挂载到外部的/app/nghtml目录
挂载后,外部目录初始是空的,会覆盖内部目录的值,是外挂内
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx
卷映射 -v ngconfg:/etc/nginx
与目录挂载相反,初始化是会将容器里面东西复制一份到容器外,外目录是有值的,是内挂外
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html -v ngconfg:/etc/nginx --name app02 nginx
映射的外目录位置统一在 /var/lib/docker/volumes下面
docker的基础入门就告一段落