前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker快速入门

Docker快速入门

作者头像
十里桃花舞丶
发布2022-05-23 08:55:36
4840
发布2022-05-23 08:55:36
举报
文章被收录于专栏:桥路_大数据

Docker快速安装

常见的Linux平台,Docker可以使用https://get.docker.com/ 中提供的脚本来一键完成安装。

代码语言:javascript
复制
# 下载脚本
curl -fsSL https://get.docker.com -o get-docker.sh
chmod +x get-docker.sh

脚本提供国内镜像源进行加速:

代码语言:javascript
复制
# 使用 Azure 进行加速
sh get-docker.sh --mirror AzureChinaCloud
# 使用 Aliyun 进行加速
sh get-docker.sh --mirror Aliyun

安装过程较慢,等待一段时间即可。然后启动docker服务。

代码语言:javascript
复制
systemctl start docker

Docker快速使用

Docker镜像(Image)是创建Docker容器的基础。镜像相当于静态模板,通过Image镜像可以启动多个Container容器。

Image镜像可以自行构建,推送到私有镜像仓库,或者提交到共有镜像仓库docker-hub上进行托管。

我们也可以直接使用docker-hub上公共的Image镜像来快速启动Container。

代码语言:javascript
复制
# 从docker-hub拉取nginx基础镜像
docker pull nginx

查看本地所有的Image镜像。

代码语言:javascript
复制
docker image ls
# 也可以使用老版本的命令,效果相同
docker images

查看镜像详情,返回JSON格式数据。

代码语言:javascript
复制
docker image inspect nginx

使用nginx镜像启动docker容器。

代码语言:javascript
复制
docker run --name nginx-container -p 8080:80 -d nginx
  • 其中,–name参数表示从Image镜像启动的Container容器名称。-p用于指定端口映射,表示将Container内的80端口,映射到本机的8080端口。-d参数表示容器后台执行。

此时可以通过浏览器访问虚拟机IP:8080端口,查看Nginx是否运行。如果无法访问,请重新构建docker0网桥。

代码语言:javascript
复制
# 停止docker
systemctl stop docker
# 安装bridge-utils
yum install -y bridge-utils 
# 关闭docker0网桥
ip link set dev docker0 down
# 删除docker0网桥
brctl delbr docker0
# 添加docker0网桥
brctl addbr docker0
# 添加网桥信息
ip addr add 172.16.10.1/24 dev docker0
# 启动docker0网桥
ip link set dev docker0 up
# 查看网桥是否正常
ip addr
# 启动docker
systemctl restart docker

查看所有运行中的Container容器。

代码语言:javascript
复制
docker container ls
# 也可以使用老版本的命令,效果相同
docker ps

查看所有Container容器(包含已停止的)。

代码语言:javascript
复制
docker container ls -a
# 也可以使用老版本的命令,效果相同
docker ps -a

进入运行中的容器。

代码语言:javascript
复制
docker exec -it nginx-container bash
  • 其中,-i参数表示与容器进行交互(始终打开标准输入),-t参数表示分配一个伪客户端。

在容器内执行完操作后,可以退出。

代码语言:javascript
复制
exit

如果容器在运行过程中出错,可以查看容器的日志。

代码语言:javascript
复制
docker logs nginx-container

可以对容器进行关闭、强制杀死的操作。

代码语言:javascript
复制
docker stop nginx-container
docker kill nginx-container

对于停掉的容器,可以再次启动。

代码语言:javascript
复制
docker start nginx-container

或者直接对容器进行重启。

代码语言:javascript
复制
docker restart nginx-container

如果,容器已经没有存在的必要,可以直接进行删除。

代码语言:javascript
复制
docker rm nginx-container

容器构建

Dcokerfile

前面,我们使用docker-hub中现成的Image镜像来运行Container容器。在生产中,一般需要将自己的应用,通过编写DockerFile构建成Image镜像。然后交给运维,快速在生产环境中运行Container容器,完成应用的部署。

首先,在/root/nginx_builder目录中编写一个DockerFile,封装nginx组件。

代码语言:javascript
复制
mkdir /root/nginx_builder
vim /root/nginx_builder/Dockerfile

Dockerfile中内容如下:

代码语言:javascript
复制
### nginx
### VERSION 0.0.1
FROM nginx
MAINTAINER Teacher Demos <teacher@docker.com>
RUN echo 'this is a diy nginx image' > /usr/share/nginx/html/index.html

其中FROM语句指定了依赖的镜像,这里使用ubuntu。MAINTAINER填写构建者信息,这里填写为Tearcher,并留了邮箱。最后的RUN语句,指定在ubuntu镜像中执行apt更新和软件安装的命令。

接下来,通过DockerFile来生成Image镜像。

代码语言:javascript
复制
docker build -t demo_nginx /root/nginx_builder/

启动Container容器。

代码语言:javascript
复制
docker run --name demo_nginx -p 8080:80 -d demo_nginx

快速了解Dockerfile构建镜像后,可以找资料深入学习这一块的内容。

通过Container生成镜像

在生产过程中,一般情况下,会通过Dockerfile来构建Image镜像。但也支持通过Container来生成Image镜像。这种场景一般用于快速对容器内驱动包、环境变量等内容的替换,或者生产问题的快速修复。进入要维护的Container中,使用命令完成操作后,将Container生成Image即可。

首先,生成一个index.html文件,然后将demo_nginx容器中的index.html文件进行替换,持久化为Image镜像。

代码语言:javascript
复制
echo "<h1>Hello Nginx</h1>" > /root/index.html

将容器内的文件拷贝到本地/tmp目录进行备份。

代码语言:javascript
复制
docker cp demo_nginx:/usr/share/nginx/html/index.html /tmp/

将要替换的index.html拷贝到容器中。

代码语言:javascript
复制
docker cp /root/index.html demo_nginx:/usr/share/nginx/html/

以命令行交互方式进入到容器。

代码语言:javascript
复制
docker exec -it demo_nginx bash

查看文件是否替换成功。

代码语言:javascript
复制
cat /usr/share/nginx/html/index.html

退出容器。

代码语言:javascript
复制
exit

将当前Container持久化为Image。

代码语言:javascript
复制
docker commit demo_nginx new_demo_nginx

查看所有Image镜像。

代码语言:javascript
复制
docker image ls

当然也可以删除镜像。

代码语言:javascript
复制
docker image rm new_demo_nginx

目录挂载

Container是无状态的,它在运行时,会提供一个可读写层进行数据的临时存储,在停止的时候会清空所有数据。为了使容器中必要的数据持久化保存,如配置文件、日志等信息,需要将本地的目录挂载到容器中。这样在容器重启后,重要的数据便不会丢失,而且多个容器挂载同一个目录,可以完成数据的共享操作。

现在,将nginx容器中的/usr/share/nginx/html/目录挂载到本地的/root/nginx/html下。在启动容器时,可以使用-v参数指定数据的挂载。

现在本地创建数据存储目录。

代码语言:javascript
复制
mkdir -p /root/nginx/html

删除之前的demo-nginx容器。

代码语言:javascript
复制
docker container stop demo_nginx
docker container rm demo_nginx

启动新的Container,并进行磁盘挂载。

代码语言:javascript
复制
docker run --name other-nginx -p 8080:80 -v /root/nginx/html:/usr/share/nginx/html/ -d demo_nginx

将本地的index.html文件拷贝到/root/nginx/html目录下,查看容器内是否已经生效。

代码语言:javascript
复制
cp /root/index.html /root/nginx/html/login.html

此时访问虚拟机IP:8080/login.html,发现已经可以访问。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker快速安装
  • Docker快速使用
  • 容器构建
    • Dcokerfile
      • 通过Container生成镜像
      • 目录挂载
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档