Windows(WSL2) Linux子系统搭建Docker环境
启动一个redis
docker run -it --rm -p 6379:6379 redis:alpine redis-server --requirepass "123123"
Docker 容器使用
- 获取镜像
docker pull ubuntu
- 启动容器
使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
docker run -it ubuntu /bin/bash
-i: 交互式操作 -t: 终端
- 查看所有的容器
docker ps -a
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:created(已创建)
restarting(重启中)
running 或 Up(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
- 查看正在运行的容器
docker ps
- 查看容器内的标准输出
docker logs <容器 ID>
- 启动一个已停止的容器
docker start <容器 ID>
- 指定容器后台运行
docker run -itd --name ubuntu-test ubuntu /bin/bash
-d 后台运行,默认不会进入容器
- 停止一个容器
docker stop <容器 ID>
- 重启容器
docker restart <容器 ID>
- 进入容器 在使用 -d 参数时,容器启动后会进入后台。
从这个容器退出,会导致容器的停止。
docker attach <容器 ID>
退出容器终端,不会导致容器的停止。
docker exec <容器 ID>
- 导出容器
docker export 1e560fca3906 > ubuntu.tar
- 导入容器
将快照文件 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 -f <容器 ID>
- 清理掉所有处于终止状态的容器
docker container prune
运行一个 web 应用
在docker容器中运行一个 Python Flask 应用来运行一个web应用
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
-d:让容器在后台运行。 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
- 查看web应用容器 查看正在运行的容器:
docker ps
PORTS:端口信息
0.0.0.0:49153->5000/tcp, :::49153->5000/tcp
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用 http://192.168.31.127:49153/
我们也可以通过 -p 参数来设置不一样的端口:
docker run -d -p 5000:5000 training/webapp python app.py
查看正在运行的容器
docker ps
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
- 查看网络端口的快捷方式
docker port <容器 ID>
- 查看 WEB 应用程序日志
查看容器内部的标准输出。
docker logs <容器 ID>
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
docker logs -f <容器 ID>
- 查看WEB应用程序容器的进程
docker top <容器 ID>
- 检查 WEB 应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
docker inspect <容器 ID>
- 停止 WEB 应用容器
docker stop <容器 ID>
- 重启WEB应用容器
启动已经停止的容器
docker start <容器 ID>
重启正在运行的容器
docker restart <容器 ID>
- 移除WEB应用容器
docker restart <容器 ID>
删除容器时,容器必须是停止状态,否则会报如下错误:
Error response from daemon: You cannot remove a running container 4d8a355def18f5a13b3d933e918c2e2a7e383bd8792671a6f246b1f21d05cb1a. Stop the container before attempting removal or force remove
docker 镜像的使用
- 列出镜像列表
docker images
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
- 获取一个新的镜像
docker pull ubuntu:20.04
- 查找镜像
docker search httpd
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
- 拖取镜像
docker pull httpd
- 删除镜像
docker rmi hello-world
- 创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1、从已经创建的容器中更新镜像,并且提交这个镜像
2、使用 Dockerfile 指令来创建一个新的镜像
- 更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
docker run -t -i ubuntu:20.04 /bin/bash
在运行的容器内使用apt-get update命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
此时ID为f5a234b2e470的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。
sudo docker commit -m="has update" -a="tang" f5a234b2e470 tang/ubuntu:v2
各个参数说明:
-m: 提交的描述信息
-a: 指定镜像作者
f5a234b2e470:容器 ID
tang/ubuntu:v2: 指定要创建的目标镜像名
我们可以使用docker images 命令来查看我们的新镜像 tang/ubuntu:v2
使用我们的新镜像 tang/ubuntu 来启动一个容器
docker run -t -i tang/ubuntu:v2 /bin/bash
- 构建镜像 我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
touch Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'tang:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
docker build -t runoob/centos:6.7 .
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
我们可以使用新的镜像来创建容器
docker run -t -i runoob/centos:6.7 /bin/bash
id tang
从上面看到新镜像已经包含我们创建的用户 tang。
- 设置镜像标签 我们可以使用 docker tag 命令,为镜像添加一个新的标签。
docker tag 860c279d2fec runoob/centos:dev