0x00 前言
一直使用过docker,但并不是太了解,于是开始学习了解一下
0x01 docker简介
1、什么是容器?
- 一种虚拟化的方案
- 操作系统级别的虚拟化
- 只能运行相同或相似内核的操作系统
- 依赖于Linux内核特性: Namespace和Cgroups (Control Group)
2、容器技术有哪些优点?
- 磁盘占用空间少
- 提供更多的服务能力和服务更多的用户
3、什么是Docker?
Docker是能将应用程序自动部署到容器的开源引擎。
使用Go语言编写(Go语言开源引擎) 项目地址
基于Apache2.0开源授权协议发行
docker的特别之处:
docker在虚拟化的容器执行环境中增加了一个应用部署引擎。该引擎目标提供一个轻量、快速的环境。
方便从开发者环境->测试环境->生产环境
4、Docker有哪些特点?(Docker的目标)
- 提供简单轻量的建模方式
- 职责的逻辑分离
- 快速高效的开发生命周期
- 鼓励使用面向服务的架构
5、Docker的使用场景
- 使用Docker容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
6、Docker的基本组成
Docker Client 客户端
Docker Daemon 守护进程
Docker Image 镜像
Docker Container 容器
Docker Registry 仓库
1.Docker客户端/守护进程:
(1)C/S架构
(2)本地/远程
2.Docker Image 镜像:
(1)容器的基石
(2)层叠的只读文件系统
(3)联合加载(union mount)
3.Docker Container 容器:
(1)通过镜像启动
(2)启动和执行阶段
启动时,在镜像的最顶层加载一个读写文件系统(可写层)
(3)写时复制
4.Docker Registry 仓库:
(1)公有:Docker Hub
(2)私有:可自己架设
0x02 安装docker
1、验证是否安装curl
验证是否安装了curl
which curl
如果没有安装则进行安装
sudo apt-get update
sudo apt-get install curl
2、使用官方脚本自动安装docker
curl -fsSL https://get.docker.com/ubuntu/|sudo sh
或curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
3、通过版本库安装docker
1.在Ubuntu中建立ce存储库
(1)更新apt资源包
sudo apt-get update
(2)安装软件包以允许apt通过HTTPS使用存储库
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
(3)添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
可使用以下命令进行验证秘钥指纹 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
sudo apt-key fingerprint 0EBFCD88
(4)可选设定稳定存储库,可不设置,则自动使用(deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable)
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
2.安装docker-ce并配置docker
(1)更新apt资源包,并进行安装docker-ce
sudo apt-get update
sudo apt-get -y install docker-ce
注:如果需要安装特定版本,则使用以下命令获取可用的版本号,使用要安装的版本号进行安装
apt-cache madison docker-ce
sudo apt-get install -y docker-ce=<VERSION>
例如:docker-ce=18.03.0~ce-0~ubuntu
(2)基础安装完成,可以先进行测试一下是否可用
sudo docker version
sudo docker run hello-world
4、配置与卸载docker
1.配置docker
(1)省略sudo命令(感觉sudo麻烦的,可以执行这一步)
如果执行时不想使用sudo命令,可以进行设置用户组,并将当前用户增加到该组中
sudo groupadd docker
sudo usermod -aG docker $USER
注销一下,再执行以下命令
docker run hello-world
(2)添加阿里云docker加速器和ip修改(不是必须的)
{
"registry-mirrors": ["https://(yourid).mirror.aliyuncs.com"],
"bip":"192.168.1.1/24"
}
2.卸载docker
(1)卸载docker-ce
sudo apt-get purge docker-ce
(2)删除镜像、容器、卷
sudo rm -rf /var/lib/docker
0x03 docker容器
1、容器的基本操作
1.启动容器
docker run IMAGE [COMMAND][ARG..]
#IMAGE启动容器所用镜像
#COMMAND和ARG容器启动后运行的命令和参数
如:输出Hello World
root@qwzf:~# docker run ubuntu echo 'Hello World'
Hello World
2.启动交互式容器
docker run -i -t IMAGE /bin/bash
#-i 始终打开标准输入 --interactive=true|false 默认false
#-t 为创建的容器分配一个伪tty终端 --tty=true|false 默认是false
如:
root@qwzf:~# docker run -i -t ubuntu /bin/bash
root@c12aa40c4376:/#
3.查看容器
docker ps [-a][-l]
#没有参数时,列出正在运行的容器
#-a 列出所有容器
#-l 列出最新创建的容器
查看已经建立起的容器
docker inspect id/容器名
4.自定义容器名
docker run --name=自定义名 -i -t IMAGE /bin/bash
5.重新启动停止的容器
docker start [-i] id/容器名
#-i可以以交互的方式来重新启动
6.删除停止的容器
docker rm id/容器名
2、守护式容器
1.什么是守护式容器
- 长期运行
- 没有交互式会话
- 适合运行应用程序和服务
2.以守护形式运行容器
运行:
docker run -i -t IMAGE /bin/bash
退出交互式bash(这样容器就会在后台运行):
Ctrl+P Ctrl+Q
3.附加到运行中的容器(再次进入容器)
docker attach id/容器名
4.启动守护式容器
docker run -d IMAGE [COMMAND][ARG..]
#-d 启用容器时使用后台的方式执行命令
5.查看容器日志
docker logs [-f][-t][--tail] 容器名
#-f 一直跟踪logs变化并返回结果 --folloes=true|false 默认false
#-t 在返回的结果上加上时间戳 --timestamps=true|false 默认false
#--tail 返回结尾处多少数量的日志 默认--tail="all"
如:显示最新的日志
root@qwzf:~# docker logs -tf --tail 0 容器名
6.查看容器内进程
docker top 容器名
7.在运行中的容器内启动新进程
docker exec [-d][-i][-t] 容器名 [COMMAND][ARG..]
如:
docker exec -i -t c12aa40c4376 /bin/bash
退出:Ctrl+P Ctrl+Q
查看:docker top c12aa40c4376
8.停止守护式容器
docker stop 容器名
#发送一个信号给容器,等待容器的停止
docker kill 容器名
#直接停止容器
0x04 docker镜像
存储位置:/var/lib/docker
查看存储驱动和存储位置:docker info
1、查看和删除镜像
1.列出镜像
docker images [选项] [REPOSITORY]
#-a 显示所有镜像,默认不显示中间层镜像,--all=false
#-f 显示时的过滤条件,--filter=[]
#--no-trunc 不使用截断的方式显示数据
#-q 只显示镜像的唯一d,--quiet=false
2.镜像标签和仓库
(1)镜像的仓库 REPOSITORY
REPOSITORY 仓库:一系列镜像的集合
REGISTRY 仓库:docker镜像的存储服务
(2)镜像标签 TAG
不同镜像以标签进行区分
仓库名+标签名->镜像名 对应一个镜像的id
ubuntu:14.04
ubuntu:latest 默认
3.查看镜像
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
#-f,--format=""
如:docker inspet ubuntu:14.04
4.删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
#-f 强制删除镜像
#--no-prune 保留被打标签的父镜像
如:
删除单个:docker rmi 镜像id
删除多个:docker ubuntu:12.04 ubuntu:14.04
删除对应的所有镜像:
docker rmi $(docker images -q ubuntu)
2、获取和推送镜像
1.查找镜像
(1)Docker Hub
(2)docker search [OPTIONS] TERM
–automated 自动化,只会显示自动化构建的镜像
–no-trunc 不使用截断的方式显示数据
-s,–stars=0 限制显示的最低星级
docker search -s 3 ubuntu
2.拉取镜像
docker pull [OPTIONS] NAME [:TAG]
#-a 匹配并下载所有标记的镜像
如:docker pull ubuntu:14.04
3.推送镜像
docker push NAME[:TAG]
3、构建镜像
- 保存对容器的修改,并再次使用
- 自定义镜像的能力
- 以软件的形式打包并分发服务及其运行环境
docker commit 通过容器构建
docker build 通过Dockerfile文件构建
1.使用commit构建镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
#-a 指定镜像作者
#-m 记录镜像构建信息
#-p 不暂停正在运行的容器
如:
docker commit -a 'qwzf' -m 'nginx' 容器名 qwzf/test1(qwzf/test1 可以随便填)
2.使用Dockerfile构建镜像
Dockerfile文件:包含一切命令的文本文件
(1)创建Dockerfile
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER qwzf "注册邮箱"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
(2)适用docker build
命令
docker build [OPTIONS] PATH |URL|-
#--force-rm
#--no-cache
#--pull
#-q
#--rm=true
#-t,tags="" 指定构建出镜像的名字
如:docker build -t='qwzf/test2'
每执行一步返回唯一id,即中间层镜像
0x05 docker的一些安装
1、安装LAMP
可能用到的命令
#拉取镜像
docker pull tutum/lamp
#查看镜像
docker images
#启动容器并绑定端口
docker run -d -p 8080:80 -p 3306:3306 -v /var/www/app/:/var/www/html tutum/lamp
#查看运行的容器
docker ps
docker ps -a
#进入正在运行的容器
docker exec -it 'id/name' /bin/bash
#退出容器
exit
#开启、重启、停止容器
docker start 'id/name'
docker restart 'id/name'
docker stop 'id/name'
具体安装过程如下:
1.查询镜像
root@qwzf:~# docker search lamp
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
linode/lamp LAMP on Ubuntu 14.04.1 LTS Container 179
mattrayner/lamp A simple LAMP docker image running the prere… 170 [OK]
tutum/lamp Out-of-the-box LAMP image (PHP+MySQL) 132
greyltc/lamp a super secure, up-to-date and lightweight L… 99 [OK]
fauria/lamp Modern, developer friendly LAMP stack. Inclu… 79 [OK]
2.拉取镜像
docker pull tutum/lamp
3.启动守护式容器并端口映射和挂载目录
root@qwzf:~# docker run --name=lamp -d -p 8080:80 -p 3306:3306 -v /var/www/app/lamp/:/var/www/html tutum/lamp
#8080 宿主机端口 80 docker端口
#/var/www/app/lamp/ 宿主机要挂载的目录
#/var/www/html docker上被挂载的位置
2、安装LNMP
1.查询镜像
docker search lnmp
2.拉取镜像
docker pull winstonpro/lnmp
3.启动守护式容器并端口映射和挂载目录
root@qwzf:~# docker run --name=lnmp -d -p 8000:80 -p 3000:3306 -v /var/www/app/lnmp/:/usr/share/nginx/html winstonpro/lnmp
3、安装vim
方式一:默认源安装
执行apt-get update更新源
root@dc3d333fc181:~# apt-get update
更新完过后我们就可以安装了vim了
root@dc3d333fc181:~# apt-get install vim
以上的方式虽然可以实现安装vim,但是速度很慢。下面是更快的方式
方式二:aliyun源安装
因为没有vi,vim编辑工具,我这里使用sed命令进行编辑文件内容。
首先查看默认源地址:
root@dc3d333fc181:~# cat /etc/apt/sources.list
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20200130T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main
从上面的输出内容我们可以看出,默认会从deb.debian.org
去更新源信息。我们将其替换为aliyun的源地址:
root@dc3d333fc181:~# sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
替换完源后我们就可以安装vim了
root@dc3d333fc181:~# apt-get clean
root@dc3d333fc181:~# apt-get update
root@dc3d333fc181:~# apt-get install vim
0x06 后记
暂时就先学这么多吧!本次学习Docker我学习了docker的安装、docker容器和docker镜像的一些操作,以及简单的端口映射和目录挂载。同时也学习了LAMP和LNMP环境的使用docker进行自动化安装。总的来说,收获很大,继续努力!!!
来源:CSDN
作者:Qwzf
链接:https://blog.csdn.net/qq_43625917/article/details/104272473