基本概念问题
啥是Docker?
Docker 最初是 它是基于 dotCloud 公司多年云服务技术的一次革新,Docke最初实现是基于LXC,从 0.7 版本以后开始去除 LXC,转 而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。于 2013 年开源,主要项目代码在 GitHub 上进行维护。
- Docker就是一个优秀的软件容器平台。
- Docker使用Google公司推出的Go语言进行开发实现, 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
- Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
- Docker 在容器的基础上,进行了进一步的封装,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。Docker 技术比虚拟机技术格调更高,速度更快、性能更强。
为啥用Docker?
好处多多,别的不说一张表清晰明了。
特点 | 容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
硬盘占用 | 一般为 MB | 一般为 GB |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
使用性能 | 接近原生 | 弱于 |
几个基本概念
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker 仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
|
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
好好理解,笔记记在这里要消化掉O(∩_∩)O
Docker安装
因为用的Windows 10系统,所以其他系统的请自行百度- ^_^
1,系统要求Docker for Windows 支持 64 位版本的 Windows 10 Pro,且必须开启 Hyper-V。
2,点击以下链接下载 Stable 或 Edge 版本的 Docker for Windows。
3,下载好之后双击 Docker for Windows Installer.exe 开始安装。
4,在 Windows 搜索栏输入 Docker 点击 Docker for Windows 开始运行。
然后会出现一个小鲸鱼的图标就okey啦。因为Docker Hub国外服务器,可以配置镜像加速器。例如:
Azure 中国镜像 https://dockerhub.azk8s.cn,七牛云加速器 https://reg-mirror.qiniu.com等。。。
对于使用 Windows 10 的系统, Docker 图标内右键菜单选择Settings ,打开配置窗口后左侧导航菜单选择 Daemon 。
在 Registry mirrors 一栏中填写加速器地址 https://dockerhub.azk8s.cn,保存后 Docker 就会重启并应用配置的镜像地址了。
镜像使用
- docker pull [选项] [Docker Registry 地址[:端口号]]仓库名[:标签] 用来获取镜像
Docker 镜像仓库地址: <域名/IP>[:端口号] 。默认地址是 Docker Hub。仓库名:即 <用户名>/<软件名> 。
eg:$ docker pull ubuntu:16.04 默认获取ubuntu16在官方库library/ubuntu的镜像 - docker run 运行容器:
-it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。
--rm :容器退出后随之将其删除。默认不会立即删除,除非手动 docker rm 。
ubuntu:16.04 :这是指用 ubuntu:16.04 镜像为基础来启动容器。
exit 退出了这个容器。 - docker image ls 列出镜像
- Docker 镜像维护原理?Docker 使用 Union FS 。具体的在分析,详见博文https://www.cnblogs.com/ilinuxer/p/6188654.html
容器操作
仓库访问
数据管理
2019年12月30日13:44:43 重新学习
docker info 查看信息
docker help常用帮助
安装常用软件Tomcat、MySQL、Redis
- 搜索镜像 docker search ------
- 拉取镜像 docker pull
- 查看镜像 docker images
- 启动镜像 docker run -***
- 停止容器 stop
- 删除容器 rm
此处在新建mysql如果用的8.0以上,远程连接会失败2059,因为加密方式的区别:
这个本地root也是我改过后的截图,如果想远程连接不报错,需要修改加密方式,就ok了。
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES; #刷新权限
常用操作
如何批量清理临时镜像文件?
答:可以使用 docker image prune 命令。
如何查看镜像支持的环境变量?
答:可以使用 docker run IMAGE env 命令。
本地的镜像文件都存放在哪里?
答:与 Docker 相关的本地资源默认存放在 /var/lib/docker/ 目录下,以
aufs 文件系统为例,其中 container 目录存放容器信息, graph 目录存放
镜像信息, aufs 目录下存放具体的镜像层文件。
如何停止所有正在运行的容器?
答:可以使用 docker stop $(docker container ls -q) 命令。
如何批量清理已经停止的容器?
答:可以使用 docker container prune 命令。
如何获取某个容器的 PID 信息?
答:可以使用 docker inspect --format '{{ .State.Pid }}' <CONTAINER ID or NAME> 命令。
如何获取某个容器的 IP 地址?
答:可以使用 docker inspect --format '{{ .NetworkSettings.IPAddress
}}' <CONTAINER ID or NAME> 命令
如何给容器指定一个固定 IP 地址,而不是每次重启容
器 IP 地址都会变?
答:使用以下命令启动容器可以使容器 IP 固定不变
$ docker network create -d bridge --subnet 172.25.0.0/16 my-net
$ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-con
tainer busybox
如何临时退出一个正在交互的容器的终端,而不终止它?
答:按 Ctrl-p Ctrl-q 。如果按 Ctrl-c 往往会让容器内应用进程终止,进而
会终止容器。
使用 docker port 命令映射容器的端口时,系统报
错“Error: No public port '80' published for xxx”?
答:创建镜像时 Dockerfile 要通过 EXPOSE 指定正确的开放端口;
容器启动时指定 PublishAllPort = true 。
可以在一个容器中同时运行多个应用进程么?
答:一般并不推荐在同一个容器内运行多个应用进程。如果有类似需求,可以通过
一些额外的进程管理机制,比如 supervisord 来管理所运行的进程。可以参考
https://docs.docker.com/config/containers/multi-service_container/ 。
如何控制容器占用系统资源(CPU、内存)的份额?
答:在使用 docker create 命令创建容器或使用 docker run 创建并启动容
器的时候,可以使用 -c|--cpu-shares[=0] 参数来调整容器使用 CPU 的权重;使用 -
m|--memory[=MEMORY] 参数来调整容器使用内存的大小。
容器操作
容器的操作包括启动、终止、使用、进入、删除。
启动容器
有两种方式,一种新建一个容器并启动,还有就是把终止状态的容器重新启动。
docker run
docker container start
终止容器
docker container stop 。当 Docker 容器中指定的应用终结时,容器也自动终止。
docker container ls -a 查看终止状态的容器。
docker container start 重启处于终止状态的容器。
导出和导入容器
docker export 导出本地某个容器。
docker import 从容器快照文件中再导入为镜像。
删除容器
docker container rm 删除一个处于终止状态的容器。如果要删除一个运行中的容器,可以添加 -f 参数。
docker container ls -a 查看所有状态容器
docker container prune清理掉所有处于终止状态的容器。
仓库访问
仓库( Repository )集中存放镜像。可以被认为是一个具体的项目或目录。
除了公共的DockerHub公共仓库 还可以建立私有仓库!DockerHub就不说了,正常操作注册-登录-拉取、推送镜像。
官方提供docker-registry ,构建私有的镜像仓库。
安装运行 docker-registry
$ docker run -d -p 5000:5000 --restart=always --name registry registry
使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。
在私有仓库上传、搜索、下载镜像。创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 127.0.0.1:5000 。用 curl 先在本机查看已有的镜像。
$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}
这里可以看到 {"repositories":["ubuntu"]} ,表明镜像已经被成功上传了。先删除已有镜像,再尝试从私有仓库中下载这个镜像。
$ docker image rm 127.0.0.1:5000/ubuntu:latest
$ docker pull 127.0.0.1:5000/ubuntu:latest
$ docker image ls
yeasy大神的:注意事项
如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。
这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。
Tips:
批量清理临时镜像文件, 使用 docker image prune 命令。
查看镜像支持的环境变量, 使用 docker run IMAGE env 命令。
本地的镜像文件都存放在哪里?与 Docker 相关的本地资源默认存放在 /var/lib/docker/ 目录下.