如何在云服务器上部署docker容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 部署docker容器

**使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmiIMAGE [IMAGE...],其中IMAGE可以为标签或ID。

  • -f, -force:强制删除镜像,即使有容器依赖它;
  • -no-prune:不要清理未带标签的父镜像。

例如,要删除掉myubuntu:latest镜像,而nginx:1.14.2则不会被删除。可以使用如下命令:

[root@womr-c ~]# docker rmi mynginx:latest 
Untagged: mynginx:latest

镜像ID删除镜像

[root@womr-c ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ubuntu       18.04     2c047404e52d   2 months ago    63.3MB
nginx        1.14.2    295c7be07902   22 months ago   109MB
[root@womr-c ~]# docker rmi -f 2c047404e52d
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:fd25e706f3dea2a5ff705dbc3353cf37f08307798f3e360a13e9385840f73fb3
Deleted: sha256:2c047404e52d7f17bdac4121a13cd844447b74e13063f8cb8f8b314467feed06

清理镜像

使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。

  • -a, -all:删除所有无用镜像,不光是临时镜像;
  • -filter filter:只清理符合给定过滤器的镜像;
  • -f, -force:强制删除镜像,而不进行提示确认

例如自动清理临时遗留镜像文件层,最后会提示释放的存储空间

[root@womr-c ~]# docker image prune -f
Total reclaimed space: 0B

创建镜像

创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。

基于已有容器创建

例如,启动一个镜像,并在其中进行修改操作。例如,创建一个test文件,之后退出,代码如下:

[root@womr-c ~]# docker run -it ubuntu:18.04 /bin/bash
root@d6b569374955:/# to 
toe    top    touch  
root@d6b569374955:/# touch test
root@d6b569374955:/# exit
[root@womr-c ~]# docker commit -m 'add a new file' -a 'worm-c' d6 test:0.1
sha256:e631dedb401061613cf759f80b6b62d83576f4c8b21511c5c3b5b24c7948e107
[root@womr-c ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
test         0.1       e631dedb4010   3 seconds ago   63.3MB
ubuntu       18.04     2c047404e52d   2 months ago    63.3MB
nginx        1.14.2    295c7be07902   22 months ago   109MB

文件模板导入

例如,要直接导入一个镜像,可以使用OpenVZ提供的模板来创建,或者用其他已导出的镜像模板来创建。OPENVZ模板的下载地址为http://openvz.org/Download/templates/precreated

[root@womr-c ~]# cat centos-7-x86_64-minimal-20170709.tar.xz |docker import - centos:7.0
sha256:1a1cbfa97aa871e243a92dc8fcc16d8df1f421e1443c210416698bb44fb3bd33
[root@womr-c ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       7.0       1a1cbfa97aa8   4 seconds ago   387MB
test         0.1       e631dedb4010   7 minutes ago   63.3MB
ubuntu       18.04     2c047404e52d   2 months ago    63.3MB
nginx        1.14.2    295c7be07902   22 months ago   109MB

Dockerfile创建

创建Dockerfile

FROM debian:stretch-slim
LABEL version="1.0" maintainer="docker user <docker_user@github>"
RUN apt-get update && \
    apt-get install -y python3 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

执行如下命令

docker build -t pthon:3 .
Removing intermediate container 955940f9c9aa
 ---> 5db817c293e5
Successfully built 5db817c293e5
Successfully tagged python3:latest

导出和导入镜像

导出镜像

例如导出nginx1.14.2镜像为文件nginx.tar

docker save -o nginx.tar nginx:1.14.2

导入镜像

例如将nginx.tar导入镜像

[root@womr-c ~]# docker load -i nginx.tar 
#也可 docker load <  nginx.tar
Loaded image: nginx:1.14.2

docker操作容器

创建容器

可以使用docker create命令新建一个容器,例如:

[root@womr-c ~]# docker create -it nginx:1.14.2 
b9ff064ef24be4a6a2651b888b090e08a6c0866e54597e8d9fd3fe5087d13355
[root@womr-c ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
b9ff064ef24b   nginx:1.14.2   "nginx -g 'daemon of…"   20 seconds ago   Created             exciting_ramanujan
[root@womr-c ~]# docker restart b9
b9

守护进程

更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加-d参数来实现

[root@womr-c ~]# docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo helloworld;sleep 1;done"
6011437625d867a83d8ccd062f09fccb2b53ed8ad33e12b0716dd0a04edb8742
[root@womr-c ~]# docker logs -f 60
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
helloworld
^C

停止容器

如下:

[root@womr-c ~]# docker stop 60
60

进入容器

如下:

[root@womr-c ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
b9ff064ef24b   nginx:1.14.2   "nginx -g 'daemon of…"   8 minutes ago   Up 8 minutes   80/tcp    exciting_ramanujan
[root@womr-c ~]# docker exec -it b9 /bin/bash
root@b9ff064ef24b:/# curl

docker数据持久化

  • 数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
  • 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。

数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。

创建数据卷

[root@womr-c ~]# docker volume create -d local test
test
[root@womr-c ~]# cd /var/lib/docker/volumes

除了create子命令外,docker volume还支持inspect(查看详细信息)、ls(列出已有数据卷)、prune(清理无用数据卷)、rm(删除数据卷)等,例如:

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

绑定数据卷

[root@womr-c www]# docker run --rm -d -p 8081:80 --name nginx-test-web \
  -v /home/nginx/www:/usr/share/nginx/html \
  nginx:1.14.2
[root@womr-c www]# docker restart nginx-test-web
[root@womr-c www]# curl localhost:8081
<h1>hello nginx</h1> 

数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。

首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:

docker run -it -v /dbdata --name dbdata ubuntu:18.04
243  docker restart  dbdata
244  docker run -it --volumes-from dbdata --name db1 ubuntu:18.04
245  docker run -it --volumes-from dbdata --name db2 ubuntu:18.04

容器端口映射

端口映射实现容器访问

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P(大写的)标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口,例如:

docker run -d -P nginx:1.14.2

映射本地接口地址到容器接口

docker run --rm -d -p 8081:80 --name nginx-test-web

映射到指定地址的任意接口

使用IP::ContainerPort绑定localhost的任意端口到容器的80端口,本地主机会自动分配一个端口

docker run -d -p ::80 nginx:1.14.2 

查看映射端口配置

[root@womr-c ~]# docker port eager_lalande
80/tcp -> 0.0.0.0:49155

Dockerfile创建镜像

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。一般而言,Dockerfile主体内容分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

例如写入一个go web程序,如下:

package main
import "net/http"
func main() {
   http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
       writer.Write([]byte("hello"))
   })
   http.ListenAndServe(":9999",nil)
}

Dcokerfile如下信息:

FROM golang
MAINTAINER worm-c
WORKDIR $GOPATH/src/godocker
COPY . $GOPATH/src/godocker
RUN go build main.go
EXPOSE 9999
ENTRYPOINT ["./main"]

生成docker镜像,如下:

docker build -t worm/godemo:v1 .
docker run -it -d -p 80:9999 worm/godemo:v1 /bin/bash
curl localhost:80
//out hello

容器编排工具DockerCompose

安装

下载地址

文件权限:

sudo chmod a+x /usr/local/bin/docker-compose

验证是否成功:

docker-compose version
[root@worm-c ~]# docker-compose version
docker-compose version 1.28.2, build 67630359
docker-py version: 4.4.1
CPython version: 3.7.9
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

运行一个简单的mysql应用,新建一个文件mysql-service.yaml,如下:

version: '3'
services:
  mysql-db:
    container_name: mysql-docker        # 指定容器的名称
    image: mysql:5.7                 # 指定镜像和版本
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
    volumes:
      - "${MYSQL_DIR}/data:/var/lib/mysql"           # 挂载数据目录
      - "${MYSQL_DIR}/config:/etc/mysql/conf.d"      # 挂载配置文件目

**

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
38 6
|
10天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
20 5
|
10天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
31 3
|
10天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
20 2
|
15天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
46 5
|
16天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
29 1
|
13天前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
31 0
|
25天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
82 2
|
2天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
116 77
|
3天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
26 3