快速上手docker及docker-compose使用

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
安装
Centos系列yum安装docker-ce
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli --allowerasing
一键脚本快速安装(通用)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 或者
curl -sSL https://get.daocloud.io/docker | sh
启动服务并设置开机启动
systemctl strat docker
systemctl enable docker
更换国内源
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
EOF
重启docker
systemctl restrat docker
执行docker info
看最底下
常用命令
搜索镜像
docker search mysql
- NAME: 镜像的名称
- DESCRIPTION: 镜像的描述
- STARS: 类似 Github 里面的 star,点赞数
- OFFICIAL: 是否 docker 官方发布
- AUTOMATED: 自动构建。
拉取镜像
docker pull mysql
拉取,下载镜像到本地
查看镜像
docker images
查看本地已有的镜像
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
查看docker进程
docker ps [-a]
默认只显示状态为up的
-a :显示所有的容器,包括未运行的
-f :根据条件过滤显示的内容
-q :静默模式,只显示容器编号
- CONTAINER ID: 容器 ID
- IMAGE: 使用的镜像
- COMMAND: 容器内运行的命令
- CREATED: 容器的创建时间
- STATUS: 容器状态
- PORTS: 容器的端口信息和协议类型(tcp\udp)
- NAMES: 自动分配的容器名称
STATUS有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
创建容器
创建但不启动容器
docker create [OPTIONS] IMAGE
创建并启动容器
docker run [OPTIONS] IMAGE
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-P: 随机端口映射,容器内部端口随机映射到主机的端口
--name="fsec": 为容器指定一个名称;
-v: 绑定一个卷;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
eg:
# 使用镜像nginx:latest在后台起一个名为g0dweb的容器
docker run --name g0dweb -d nginx:latest
# 使用镜像nginx:latest在后台起一个名为g0dweb2的容器,并将容器的80端口映射到服务器8080端口,主机的/www目录映射到容器的 /www
docker run --name g0dweb2 -p 8080:80 -v /www:/www -d nginx:latest
刚刚创建的两个容器
容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了。目录挂载解决以上问题
容器的启停与重启
# 开启容器
docker start [NAME]/[CONTAINER ID]
# 停止容器
docker stop [NAME]/[CONTAINER ID]
# 停止所有容器
docker stop $(docker ps -aq)
Eg:
使用ID停止上面的g0dweb2
使用name停止g0dweb
进入容器
进入已经启动的容器,使用bash终端
docker exec -it g0dweb /bin/bash
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
创建容器并进入终端,即在前文创建容器的基础上增加-it参数和/bin/bash终端
docker run --name g0dweb3 -it nginx:latest /bin/bash
删除容器
docker rm [NAME]/[CONTAINER ID]
# 删除所有已退出的容器
docker rm $(docker ps -q -f status=exited)
# 删除所有已停止的容器
docker stop $(docker ps -a -q)docker rm $(docker ps -a -q)
# 删除所有容器
docker rm $(docker container ps -aq)
eg:
ID删除
NAME删除
获取容器日志
docker logs [OPTIONS] CONTAINER
# 显示时间戳查看g0dweb的日志
docker logs -f g0dweb
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
通过容器创建镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
eg:
将容器g0dweb 保存为新的镜像g0dweb:v1,并添加提交人为g0d,说明信息为g0dweb。
管理本地镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID。
查看镜像上文中已讲到
删除镜像
docker rmi[NAME]/[CONTAINER ID]
文件传输
docker cp 主机路径 容器ID:容器路径
docker cp 容器ID:容器路径 主机路径
把本机的install_database.log复制到容器g0dweb的tmp目录下
Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
FROM # 构建镜像基于哪个镜像
MAINTAINER # 镜像维护者姓名或邮箱地址
RUN # 构建镜像时运行的指令
ADD # 拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
WORKDIR # 为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录
VOLUME # 指定容器挂载点,映射宿主机的目录
EXPOST # 映射端口
CMD # 容器启动的时候要运行的命令,如果有多个则以最后一个为准
ENTRYPOINT # 运行容器的时候要执行的命令,可以追加命令
COPY # 拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENV # 设置容器环境变量
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
例如:
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
这会创建三层,可以简写为:
FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
下载安装
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.10.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 或者
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.10.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
使用docker-compose.yml创建wordpress容器
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
在docker-compose.yml 文件所在目录,执行:docker-compose up
就可以跑起来了。
在后台运行只需要加一个 -d 参数docker-compose up -d
查看运行状态:docker-compose ps
停止运行:docker-compose stop
重启:docker-compose restart
重启单个服务:docker-compose restart service-name
进入容器命令行:docker-compose exec service-name sh
查看容器运行log:docker-compose logs [service-name]
https://docs.docker.com/compose/
未标注转载均为本站原创,转载时请以链接形式注明文章出处。 源码软件来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权等不妥之处请联系站长删除。敬请谅解!
暂无评论数据