Docker 使用手册(1)
Docker 使用手册
学前准备
1、Linux基础
Docker学习
- Docker概述
- Docker安装
- Docker命令
- 镜像命令
- 容器命令
- 操作命令
- ……
- Docker镜像!
- Docker数据卷
- DockerFile
- Docker网络原理
- IDEA 整合Docker
- Docker Compose
- Docker Swarm
- CI/CD jenkins
一、Docker 概述
1、Docker 为什么会出现?
一款产品 开发-上线 两套环境。应用环境,应用配置
开发出来的东西交给运维,需要部署环境、配置,会十分麻烦!
我们能不能用一套东西(环境+项目)一起打包,避免不必要的麻烦?

Docker 给以上问题提出了解决方案!
Docker思想来自于集装箱
JRE --> 多个应用(端口冲突)--> 东西都是交叉的
隔离:Docker核心思想!打包装箱,每个箱子都是隔离的
2、Docker 的历史
2010年,几个搞IT的年轻人 做一些LXC有关的容器化技术,他们将自己的技术成为容器化技术,命名:Docker
刚刚诞生之时,没有人注意,公司活不下去,就选择开源
2013年,Docker开源
Docker火了之后,每个月都会更新一个版本
2014年4月9日,Docker1.0正式发布
Docker为什么会火呢?
十分的轻巧
3、Docker 能干嘛?
Docker
VS 虚拟机
- 传统虚拟机会虚拟出硬件,运行一个完整的操作系统,然后在系统之上安装运行软件
- 容器内应用直接运行在宿主机内核中,容器没有内核,没有虚拟硬件,所以就比较轻便
- 每个容器有属于自己的文件系统,互相隔离,互不影响。
Docker 开发、运维
应用更快速的交付和部署
传统:一堆帮助文档、安装程序
Docker:打包镜像、发布测试,一键运行!
更便捷的升级或扩缩容
使用了Docker之后,升级环境像搭积木一样!
例如:项目打包为一个应用,服务器A出现问题,性能出现瓶颈,我要做水平扩展,做负载均衡,我们可直接在服务器上直接一键运行,服务器B就被扩展起来啦
更简单的系统运维
开发、测试、线上环境高度一致
更高效的系统利用
Docker是内核级别的虚拟化,可以在一个物理机上运行多个容器实例,将物理机性能压榨到极致
二、Docker安装
1、Docker的基本组成
镜像(image)
Docker镜像相当于一个模板,通过一个镜像可以创建多个容器,最终项目的运行是在容器中的。类似于:类与实例的关系
容器(container)
Docker利用容器技术,独立运行一个或者一组应用,这些容器都是用镜像来创建的
基本命令:
启动、停止、重启、删除
目前可以把这个容器理解为一个简易的操作系统
仓库(Repository)
存放镜像的地方
仓库分为:公有仓库、私有仓库
公有仓库(Docker Hub),默认国外
阿里云都有容器服务器,(配置镜像加速)
2、Docker 安装
环境准备
-
需要会一点Linux命令
-
Centos7
-
使用命令行工具(Xshell,或者Termius),我这里是Termius
环境查看
略
安装
# 1、卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、需要的安装包
sudo yum install -y yum-utils
# 3、设置镜像库 (这里记得替换为国内的阿里云镜像安装)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 建议安装这个
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、更新yum软件包索引
yum makecache dast
# 5、安装docker有关内容, ce-社区版本
sudo yum install docker-ce docker-ce-cli containerd.io
# 6、启动docker服务
systemctl start docker
# 7、docker -version
查看是否安装成功!
测试是否安装成功
# 8、hello-world
docker run hello-world
# 9、查看镜像
docker images
卸载Docker
卸载依赖,删除docker运行环境
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker # 默认工作路径
sudo rm -rf /var/lib/containerd
配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ix1b7gpx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3、回顾hello-world流程
4、Docker 是怎么工作的?
Docker是一个C/S服务,Docker守护进程运行在主机上,通过Socket从客户端访问,
Docker-Server 接收到Docker-Client指令,就会执行这个命令
三、Docker的常用基本命令
1、帮助命令
runoob@runoob:~$ docker -version # 显示docker的版本信息
runoob@runoob:~$ docker info # 显示docker的更加详细信息
runoob@runoob:~$ docker [命令] --help # 所有|指定命令的帮助文档
2、镜像命令
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB
ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB
hello-world latest 690ed74de00f 6 months ago 960 B
# 解释
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
# 可选项
-a 显示所有镜像
-q 显示所有ImageId
# 可组合命令
-- 批量删除镜像
runoob@runoob:~$ docker rmi $(docker images -aq)
搜索镜像
runoob@runoob:~$ docker search mysql
# 可选项
--filter 过滤搜索
下载镜像
# 默认下载最新版镜像
runoob@runoob:~$ docker pull mysql
Using default tag: latest
8b87079b7a06: Pulling fs layer
a3ed95caeb02: Download complete # 分层下载
0d62ec9c6a76: Download complete
a329d50397b9: Download complete
# 默认下载指定版本镜像
runoob@runoob:~$ docker pull mysql:5.7
删除镜像
# 指定删除
runoob@runoob:~$ docker rmi -f 容器id
# 删除多个
runoob@runoob:~$ docker rmi -f 容器id 容器id 容器id 容器id
# 批量删除
runoob@runoob:~$ docker rmi -f $(docker images -aq)
3、容器命令
说明:我们需要有一个镜像才可以运行容器,linux,这里我们使用centos
runoob@runoob:~$ docker pull centos
新建并启动容器
runoob@runoob:~$ docker run [可选参数] centos
# 可选参数
-i:交互式
-t:打开终端
-d:后台启动
--name:指定容器名称
-it:交互式打开
-p:指定端口
-p 主机ip:port:容器port
-p port:容器port
-p 容器port
-P:随机指定端口
# 测试 启动并进入容器
runoob@runoob:~$ docker run -it centos /bin/bash
root@d3274819:/#
# 退出容器
root@d3274819:/# exit
列出所有运行的容器
# 列出正在运行的容器
docker ps
# 列出曾经|正在运行的容器
docker ps -a
# 显示所有运行容器的编号
docker ps -aq
# 显示最近的容器
docker ps -n=?
# 批量删除容器
docker rm -f $(docker ps -aq)
列出所有运行的容器
# 退出容器(停止容器)
root@d3274819: exit
ctrl + p + q # 容器不停止退出
操作容器
docker start 容器id
docker kill 容器id
docker stop 容器id
docker restart 容器id
4、其他常用命令
后台启动容器
# 后台启动
docker run -d centos
# 启动之后,docker ps发现容器停止了,原因是容器要使用后台运行,就必须要有一个前台进程,docker发现没有前台进程,就停止了
# nginx,容器启动后会发现没有服务了,就立刻停止,就是停止服务了
查看日志
docker logs -tf --tail 10 容器id
# 可选参数
-f:
-t:加上时间
--tail number:尾部n条
# 执行shell脚本
docker run -d centos -c "while true;do echo hello;sleep 1;done"
查看容器的进程
docker top 容器id
查看镜像元数据
docker inspect 容器id
进入当前正在运行的容器
# 方式一,打开一个新的终端
docker exec -it 容器id /bin/bash
# 方式二,进入正在运行的命令行,不会启动新的进程!
docker attach 容器id
从容器内拷贝文件到主机
docker cp 容器id:容器路径 本地主机路径
小结
可视化
-
portainer(先用这个)
docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- Rancher 持续集成时(CI/CD时再用)
什么是portainer?
Docker图形化管理工具,提供给我们操作!
访问测试:http://ip:8088/