Docker和DockerCompose基础教程及安装教程
Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
CentOS Docker 安装
使用官方安装脚本自动安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
启动 Docker。
sudo systemctl start docker
将Docker服务设置为开机启动.
sudo systemctl enable docker
Docker三个基本概念
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 镜像加速
Mac端配置
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ghcr.io",
"https://mirror.baidubce.com"
]
命令配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hub-mirror.c.163.com", "https://ustc-edu-cn.mirror.aliyuncs.com", "https://ghcr.io", "https://mirror.baidubce.com", "https://kuamavit.mirror.aliyuncs.com", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
检查加速器是否生效
$ docker info
Registry Mirrors:
https://hub-mirror.c.163.com/
https://ustc-edu-cn.mirror.aliyuncs.com/
https://ghcr.io/
https://mirror.baidubce.com/
Docker 使用
Docker 容器使用
获取镜像
$ docker pull ubuntu
启动容器
$ docker run -it ubuntu /bin/bash
参数说明:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
查看所有容器
$ docker ps -a
查看正在运行容器
$ docker ps
启动已停止容器
$ docker start b750bbbcfd88
后台运行容器
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
停止容器
$ docker stop <容器 ID>
重启容器
$ docker restart <容器 ID>
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
- docker attach
- docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
attach 命令(不推荐)
$ docker attach 1e560fca3906
注意: 如果从这个容器退出,会导致容器的停止。
exec 命令(推荐)
$ docker exec -it 243c32535da7 /bin/bash
注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。
更多参数说明请使用 docker exec --help 命令查看。
导出容器快照
如果要导出本地某个容器,可以使用 docker export 命令。
$ docker export 1e560fca3906 > ubuntu.tar
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:
$ docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
删除容器使用 docker rm 命令:
$ docker rm -f 1e560fca3906
数据拷贝
Docker cp 命令
**docker cp 😗*用于容器与主机之间的数据拷贝。
语法
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS说明:
- **-L 😗*保持源目标中的链接
实例
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
运行WEB应用
运行WEB应用
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py # 指定映射端口
参数说明:
- **-d:**让容器在后台运行。
- **-P:**将容器内部使用的网络端口随机映射到我们使用的主机上。
查看 WEB 应用容器
使用 docker ps 来查看我们正在运行的容器:
docker ps
查看端口映射
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
docker port bf08b7f2cd89
查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
docker logs -f bf08b7f2cd89
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
查看WEB应用程序容器的进程
docker top redis-test
检查 WEB 应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
docker inspect redis-test
停止 WEB 应用容器
docker stop redis-test
重启WEB应用容器
docker start redis-test
docker restart redis-test # 重启正在运行的容器
移除WEB应用容器
docker rm redis-test
Docker 镜像使用
列出镜像列表
songfayuan@songfayuandeMacBook-Pro ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest b0e0b0a92cf9 2 weeks ago 680MB
redis latest 7faaec683238 3 weeks ago 113MB
nginx latest 87a94228f133 3 weeks ago 133MB
activiti/activiti-keycloak latest 4f29e5564672 10 months ago 779MB
kibana 7.2.0 3e581a516dcd 2 years ago 890MB
elasticsearch 7.2.0 0efa6a3de177 2 years ago 861MB
各个选项说明:
- **REPOSITORY:**表示镜像的仓库源
- **TAG:**镜像的标签
- **IMAGE ID:**镜像ID
- **CREATED:**镜像创建时间
- **SIZE:**镜像大小
获取镜像
docker pull ubuntu:13.10
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
docker search httpd
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
拖取镜像
docker pull httpd
下载完成后,我们就可以使用这个镜像了。
docker run httpd
删除镜像
镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:
docker rmi hello-world
创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 1、从已经创建的容器中更新镜像,并且提交这个镜像
- 2、使用 Dockerfile 指令来创建一个新的镜像
本地加载镜像
要从本地加载 Docker 镜像,你可以使用以下命令:
docker load < image.tar
其中 image.tar
是包含 Docker 镜像的文件路径。这将从指定的文件中加载镜像,并将其添加到本地的 Docker 镜像列表中。
导出镜像
要导出 Docker 镜像到本地文件,可以使用以下命令:
docker save -o image.tar image_name
其中 image_name
是要导出的 Docker 镜像的名称。该命令将镜像打包为一个 tar 文件,并将其保存到本地的文件系统中。你可以指定任意的输出文件名,例如 image.tar
。
请注意,加载和导出 Docker 镜像都需要在拥有 Docker 守护进程的主机上执行。
Docker Dockerfile
Docker应用
Docker安装Elasticsearch
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
Docker 命令大全
https://www.runoob.com/docker/docker-command-manual.html
Docker Compose
安装docker-compose
从github上下载docker-compose二进制文件安装
- 下载最新版的docker-compose文件
sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
- 测试安装结果
[root@MiWiFi-R4A-srv ~]# docker-compose -v
Docker Compose version v2.21.0
docker-compose -h
查看帮助
docker-compose -h
docker-compose up
在后台启动所有服务
docker-compose up -d
docker-compose stop
docker-compose stop
停止正在运行的容器,可以通过docker-compose start 再次启动
docker-compose stop [options] [SERVICE...]
选项包括 -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
docker-compose down
停止和删除容器、网络、卷、镜像
docker-compose down [options]
选项包括:
- –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
- -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
- –remove-orphans,删除服务中没有在compose中定义的容器
docker-compose down
停用移除所有容器以及网络相关