俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!
此笔记主要是antlr4.13版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。
一、基础概念:
1、docker是基于Go语言实现的开源容器项目。诞生于2013年年初,最初发起者是dotCloud公司。docker开源后受到业界广泛的关注与参与,目前已有80
多个相关开源组件项目,逐渐形成了围绕docker容器的完整生态体系。
官方网站:https://www.docker.com/
官方文档:https://docs.docker.com/
官方仓库:https://hub.docker.com/ 账号密码:cat4416/guowenjie 邮箱:565335545@qq.com
中文学习教程:https://www.runoob.com/docker/docker-tutorial.html
源代码:https://github.com/docker
2、docker在开发和运维中的优势:
(1)更快速的交付和部署。
(2)更高效的资源利用。
(3)更轻松的迁移和扩展。
(4)更简单的更新管理。
3、docker的三大核心概念:
(1)docker镜像:类似于虚拟机镜像,是一个只读的模板。类似于java类文件。
(2)docker容器:是基于镜像创建的的应用运行实例。类似于生成的java对象。
(3)docker仓库:类似于代码仓库,用于集中存放镜像文件的仓库中心。
4、docker的特点:
(1)环境的标准化。
(2)隔离性。
(3)可以快速创建和销户。
5、数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于linux的mount行为。
数据卷可以在容器之间共享和重用,并且修改后会立马生效,数据卷的更新不会影响镜像。
6、Dockerfile是由一行行指令语句组成,指令又分为配置指令和操作指令。
7、容器与应用是同生共死的关系,启动容器就是启动主进程,当容器中指定的应用终结时,容器也会自动停止,此时容器处于stopped状态。
故需要注意有使用伪终端交互时,不能使用exit命令终止终端交互,应使用Ctrl+p+q快捷键退出方式。
8、禁止在docker环境下使用sudo命令来提升权限,因为sudo命令会在当前进程下,创建子进程来执行对应的命令。
与docker容器只有一个主进程的要求相背离,并且宿主机向改容器发送信号量时,变为被sudo进程收了,而不是sudo后面对应的命令。
应该为使用gosu工具来代替,此工具在提升权限的同时,在当前线程下执行对应的命令,使得容器继续保持一个主进程。
9、默认情况下,创建容器时,如果不知道网络,则默认为bridge网桥模式,容器与宿主机直接可以直接通过网桥进行通信,但是如果外网需要
访问容器,必须经过宿主机的ip,同时还需要创建容器时主动暴露映射端口,否则外网无法访问容器。但是宿主机可以直接访问容器没有暴露
的服务和端口,不需要容器额外声明暴露。
二、基础功能:
1、从Docker Hub网站上获取镜像,直接执行命令:docker pull Name[:TAG],
例如 docker pull ubuntu:18.04。如果不指定TAG,则默认会选择latest标签,即下载仓库的最新版本镜像。
如果不用官方的仓库获取,也可以指定注册服务器的地址。例如 docker pull index.tenxcloud.com/docker_library/node
2、相同的镜像文件只能会有一个,相同的容器也只能有一个,但是一个镜像可以有生成多个容器。
镜像是否相同:是根据 镜像名称+版本号 来判断的。容器是否相同:是根据容器ID来判断的。
3、容器与应用是同生共死的关系,当容器中指定的应用终结时,容器也会自动停止,此时容器处于stopped状态。
故需要注意有使用伪终端交互时,不能使用exit命令终止终端交互,应使用Ctrl+p+q快捷键进行不停止退出方式。
4、配置镜像源加速(使用国内镜像来加快docker的镜像访问):
(1)具体配置可参考https://docs.docker.com/engine/reference/commandline/dockerd/。
(2)创建并配置docker的守护进程:vim /etc/docker/daemon.json
{
"registry-mirrors":["http://hub-mirror.c.163.com"]
}
(3)重新加载配置使其生效:systemctl daemon-reload
(4)重启docker: systemctl restart docker
5、docker的linux版本安装参考:https://docs.docker.com/engine/install/centos/#install-using-the-repository
6、docker的命令参数,可以用=或者空格来赋值参数,比如 --network=host 或者为 --network host 都是一样的意思。
三、使用笔记:
1、docker常用操作命令:
(1)查看当前linux系统下有哪些docker镜像文件:docker images ,可以加 --filter 过滤。
(2)查看当前运行的docker镜像:docker ps ,如果需要查看全部容器(包括已经停止的),可以加 -a,如果需要查看容器大小,加上 --size
(3)进入运行的镜像环境: docker exec -it 《镜像CONTAINER ID》 /bin/bash
(4)给镜像增加别名和打标签:docker tag 《镜像名:版本》 《新别名:版本》
(5)查看镜像详细信息:docker inspect 《镜像名:版本》 或者查看容器或则数据卷 《容器名》、《数据卷名》
(6)在镜像仓库中搜索镜像: docker search 《keyword》
(7)删除本地镜像:docker rmi 《镜像名:版本》 如果镜像有运行中的容器,删除会报错,可以加 -f 强行删除
(8)删除容器:docker rm 《容器ID》
(9)清除镜像遗留文件或未使用的镜像: docker image prune
(10)根据镜像生成容器实例并运行: docker run 《镜像ID》
(11)启动已存在的容器: docker start 《容器ID》,如果容器本身是运行状态,则忽略。
(12)镜像创建:用commit、import和build三种形式的子命令。
(13)存出和载入:docker save -o 和 docker load -i
(14)上传镜像到仓库中心:docker push 《镜像名:版本》 相对应的拉取镜像用 docker pull 《镜像名:版本》
(15)查看docker信息:docker info
(16)查看docker的镜像层:docker history 《镜像名:版本》
2、创建镜像:
(1)基于已有容器创建(对于在容器环境定制化后进行多机部署非常实用):
命令:docker commit [options] 《container》 《repository:tag》
示例:docker commit -m "me added a new file" -a "Cat" 9ca1fdd53ac0 mytestubuntun:1.0
说明:-m 表示提交信息, -a表示作者, 9ca1fdd53ac0是容器id,mytestubuntun:1.0 是新镜像的名称和标签。
(2)基于本地模板导入:
命令:docker import [options] 《repository:tag》
说明:导入一个镜像,可以使用OpenVZ提供的模