docker官网文档地址:https://docs.docker.com/get-docker/
安装docker流程
1、卸载旧的版本
2、需要的安装报
3、设置镜像的仓库
4、安装docker需要的依赖
5、启动
阿里云容器镜像加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
Docker基本概念
镜像
容器
仓库
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker常用命令
帮助命令
docker version
显示docker的常用信息
1 | yangfan@yangfan-virtual-machine:~$ docker version |
docker info
显示docker的信息信息,包括镜像和容器的数量
1 | yangfan@yangfan-virtual-machine:~$ docker info |
docker –help
显示帮助信息
1 | yangfan@yangfan-virtual-machine:~$ docker --help |
镜像命令
docker images
查看所有本地的主机上的镜像
1 | yangfan@yangfan-virtual-machine:~$ sudo docker images |
docker search 镜像名
查找镜像
1 | yangfan@yangfan-virtual-machine:~$ sudo docker search mysql |
docker pull 镜像名
下载镜像
默认使用最新版
1 | yangfan@yangfan-virtual-machine:~$ sudo docker pull citizenstig/dvwa |
指定版本
docker pull 镜像名[:tag]
1 | yangfan@yangfan-virtual-machine:~$ sudo docker pull mysql:5.7 |
docker rmi
删除镜像包
docker rmi id
通过id删除镜像
1 | yangfan@yangfan-virtual-machine:~$ sudo docker rmi a70d36bc331a |
docker rmi -f $(docker images -qa)
删除全部镜像
1 | yangfan@yangfan-virtual-machine:~$ sudo docker rmi -f $(sudo docker images -a) |
容器命令
docker run [可选参数] [image/镜像名]
新建容器并启动
# 参数
–name=”Name” 容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
1 | yangfan@yangfan-virtual-machine:~$ sudo docker run --name nginx2 -d -p 3355:80 nginx |
# 测试 启动并进入容器
docker run -it centos /bin/bash
退出 exit
docker ps
列出当前正在运行的容器
1 | yangfan@yangfan-virtual-machine:~$ sudo docker ps |
参数
-a 列出所有的运行的容器+出历史运行过的容器
退出容器
exit 直接容器停止并退出
ctrl + P + Q 容器不停止退出
删除容器
docker rm 容器id 删除指定的容器,不能删除正在运行的容器
docker rm -f $(docker ps -qa) 删除所有容器
启动和停止容器的操作
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前容器
常用其他命令
后台启动容器的坑
docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
nginx,容器启动后,发现自己没有提供服务,就会立刻停止
查看日志
docker logs -f -t –tail 行数 容器
查看容器中进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id
进入当前正在运行的容器
docker exec -it 容器id bashshell
docker attach 容器id
区别
docker exec 进入容器后开启一个新的终端,可以在里面操作
docker attach 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径
Docker实战操作
docker 安装 nginx
搜索
docker search nginx
1 | yangfan@yangfan-virtual-machine:~$ sudo docker search nginx |
下载nginx
1 | yangfan@yangfan-virtual-machine:~$ sudo docker pull nginx:1.18.0-alpine |
运行容器
1 | yangfan@yangfan-virtual-machine:~$ sudo docker run --name nginx1 -d -p 3344:80 nginx |
进入容器查看配置文件
1 | yangfan@yangfan-virtual-machine:~$ sudo docker exec -it 2cd5726333e7 /bin/bash |
安装tomcat
官方的使用方式
docker run -it –rm tomcat:90
–rm 一般用来测试,用完就删除
下载镜像
1 | yangfan@yangfan-virtual-machine:~$ sudo docker pull tomcat |
运行镜像
1 | yangfan@yangfan-virtual-machine:~$ sudo docker images |
docker stats 容器id
查看cpu状态
1 | CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS |
Commit镜像
docker commit 提交容器成为一个新的副本
docker commit -m=”提交的描述信息” -a=”作者” 容器id 目标镜像名[:TAG]
1 | fany@ubuntu18:~$ sudo docker commit -m="commit版centos" -a="fany" 1e7b39c3c2da fany/centos:2.0 |
容器数据卷
使用数据卷
docker run -it -v 主机目录:容器内目录
把主机目录挂载到容器目录中
使用数据卷实战:安装mysql
下载mysql
1 | docker pull mysql |
运行mysql
1 | # 官方mysql运行测试命令 |
1 | docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 |
具名和匿名挂载
1 | 匿名挂载 |
所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_data
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用具名挂载
1 | 区分匿名挂载/具名挂载还是指定路径挂载 |
扩展:
-v /宿主机路径:容器内路径
1 | # 通过 -V 容器内路径:ro rw 改变读写权限 |
初始Dockerfile
dockerfile 就是用来构建 docker镜像的构建文件,命令脚本
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层
1 | # 创建一个dockerfile文件 名字可以随机 建议dockerfile |
执行
1 | docker build -f /home/dockerfile1 -t 作者名/镜像名:版本 . |
1 | fany@ubuntu18:~/docker/DockerFile$ sudo docker build -f /home/fany/docker/DockerFile/dockerfile -t fany/centos:1.0 . |
数据卷容器
docker run -it –name docker01 –volumes-from docker01 作者名/镜像名:版本
通过以上的方式我们可以实现容器间的数据共享
任何一个容器被删除,共享的数据不会丢失
多个mysql实现数据共享
1 | docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 |
结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦持久化到了本地,这个时候,本地的数据是不会删除的。
DockerFile
dockerfile介绍
dockerfile构建过程
dockerfile的指令
1 | FROM # 基础镜像,一切从这里开始构建 |
实战测试:centos
创建一个自己的centos
1 | 1 编写DockerFile配置文件 |
列出本地进行的变更历史镜像命令
docker history 镜像id
1 | fany@ubuntu18:~/docker/DockerFile$ sudo docker history 2eee339e854a |
CMD 和 ENTRYPOINT 区别
1 | CMD # 指定容器启动的时候需要运行的命令 替换 |
实战测试:Tomcat镜像
1、准备镜像文件 tomcat压缩包,jdk的压缩包
2、编写dockerfile文件,官方命名Dockerfile
1 | FROM centos |
3、构建镜像
1 | docker build -f diytomcat |
4、启动镜像
5、访问测试
6、发布项目
发布自己的镜像
https://homenew.console.aliyun.com/home/dashboard/ProductAndService
阿里云的容器镜像服务