Docker
Docker
gitbook: 前言 - Docker — 从入门到实践 (gitbook.io)
官方文档: docker | Docker Documentation
安装 Docker
ubuntu 20.04
1 | Add Docker's official GPG key: |
1 | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
启动 Docker
由于Docker是 B/S 架构,所以需要在本机也启动 Docker 服务
1 | sudo systemctl enable docker |
建立docker用户组
将用户组的人加入 docker 用户组,这样就不用一直使用sudo等命令
1 | sudo groupadd docker |
这样可以允许该用户组的成员使用docker
如果尝试之后没有可以试试重启服务器
制作镜像
可以使用 docker commit
创建镜像,这种方法就是将对容器的修改保存进镜像中,这种方法不推荐使用,因为难以维护
制作镜像推荐使用 Dockerfile
制作镜像
创建 Dockerfile
VOLUMES
数据卷,用来持久化容器中的数据,以免容器销毁后数据也销毁,同时保证数据不在镜像中,防止以后转移镜像时,带上敏感数据
COPY 与 ADD
简单来说两者都可以将文件复制到容器中,但是 ADD 有着更高级的功能,比如自动解压等
EXPOSE
暴露端口使用
WORKDIR
在 Dockerfile 中,修改工作路径并不是通过 cd /app
来实现的,而是通过 WORKDIR /app
修改工作路径,这是新手常犯的错误 :(
RUN
这个是最基础的指令了,就是执行之后的 shell
命令,但是为了将构建的镜像层数减小,最好是将
1 | RUN apt-get install -y git certbot python3-certbot-nginx expect openssh-server |
改成
1 | RUN apt-get install -y git certbot python3-certbot-nginx expect openssh-server \ |
这样仅仅执行了一遍 RUN 命令,减少了镜像层数
进入容器内部
1 | docker exec -it "[your_container_name]" /bin/bash |
获取镜像
1 | docker pull [OPTION] 仓库名[:标签] |
一般会从官方镜像中获取需要的镜像
列出镜像
1 | docker image ls |
删除本地镜像
1 | docker image rm [opetion] <image> |
启动容器
下面的命令则启动一个 bash 终端,允许用户进行交互。
1 | $ docker run -t -i ubuntu:18.04 /bin/bash |
其中,-t
选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i
则让容器的标准输入保持打开,加上 -d
以守护态运行
在交互模式下,用户可以通过所创建的终端来输入命令,例如
1 | root@af8bae53bdd3:/# ls |
当利用 docker run
来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从 registry 下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
终止容器
1 | docker container stop |
进入容器
1 | docker exec -it [docker_name] /bin/bash |
推送与拉取
拉取
1 | docker pull centos # 拉取 |
推送
1 | docker tag ubuntu:18.04 username/ubuntu:18.04 |
Docker-compose
是对 Docker 容器集群的集体编排
安装
Install the Compose plugin | Docker Docs
ubuntu
1 | sudo apt-get update |
基本概念
镜像
存储静态数据,是一个特殊的文件系统,使用分层存储
容器
可以理解为是一个镜像的一个实例,本质是一个进程,可以创建,启动,停止,销毁