Docker是一个开源的基于LXC的高级容器引擎,我们可以把应用以及依赖包打包到一个镜像中,发布到支持Docker的 Linux或Windows 机器上,实现虚拟化。
Docker采用C/S架构,由4个部分组成:Docker Client客户端、Docker Daemon守护进程、Docker Image镜像、Docker Container容器。Docker Client客户端为用户提供一系列可执行命令,用户可用这些命令跟Docker Daemon交互;Docker Daemon作为服务端,一般后台运行,等待并处理来自客户端的请求,如创建、运行容器等。Docker Image镜像和Docker Container容器类似于面向对象编程中的类和对象,Docker Container容器是通过Docker Image镜像来创建的。
1.安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
安装完成后,可以看一下docker的版本来确认安装是否成功。
jishu@Jishu:~/debs$ docker -v
Docker version 19.03.8, build afacb8b
2.Docker常用命令
2.1 Docker环境信息
2.1.1 Docker环境信息查询
docker info
2.1.2 Docker版本查询
docker version
2.2 image操作
2.2.1 搜索images
docker search [imageName]
2.2.2 下载images
docker pull [images]:[version]
2.2.3 查看images
docker images
2.2.4 删除images
docker rmi [imageID]
2.3 Container操作
2.3.1 创建Container
docker create --name [containerName] [images]:[version]
2.3.2 运行Container
docker run [OPTIONS] [images]:[version] [COMMAND] [ARG...]
OPTIONS参数说明:
-a: 指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项
-d: 后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与-t同时使用
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为 主机端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="containerName": 为容器指定一个名称
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致
-h "hostname": 指定容器的hostname
-e key="value": 设置环境变量
--env=[]: 设置环境变量
--env-file=[]: 从指定文件读入环境变量
-m: 设置容器使用内存最大值
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container四种类型
--link=[]: 添加链接到另一个容器
--expose=[]: 开放一个端口或一组端口
--volume, -v: 绑定一个卷
举两个常用例子来说明docker run命令。
1) 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
2) 使用镜像nginx:latest,以后台模式启动一个容器,并将容器的 80 端口映射到主机的80端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
2.3.3 在运行的Container中执行命令
docker exec [OPTIONS] [containerName] [COMMAND] [ARG...]
OPTIONS说明:
-d: 分离模式,在后台运行
-i: 保持STDIN打开
-t: 分配一个伪终端
在Container中开启一个交互模式的终端的例子。
docker exec -it [containerName] /bin/bash
2.3.4 启动Container
docker start [containerName]
2.3.5 关闭Container
docker stop [containerName]
2.3.6 重启Container
docker restart [containerName]
2.3.7 杀掉运行中的Container
docker kill [containerName]
2.3.8 删除Container
docker rm [containerID]
2.3.9 列出所有Container
docker ps -a
2.3.9 向容器指定目录拷贝文件
docker cp [YourHostFilePath] [containerID]:[DockerPath]
2.4 image制作和提交
2.4.1 container打包成image
docker commit -a "author" -m "comments" [containerID] [ImageName]:[Version]
其中"-a"和"-m"参数可以不添加。
2.4.2 提交image
docker push [ImageID] [repertory_address]