如何在云服务器上部署docker容器
**使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmiIMAGE [IMAGE…],其中IMAGE可以为标签或ID。
- -f, -force:强制删除镜像,即使有容器依赖它;
- -no-prune:不要清理未带标签的父镜像。
例如,要删除掉myubuntu:latest镜像,而nginx:1.14.2则不会被删除。可以使用如下命令:
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
[[email protected] ~]# docker rmi mynginx:latest Untagged: mynginx:latest
镜像ID删除镜像
[[email protected] ~]# 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 [[email protected] ~]# docker rmi -f 2c047404e52d Untagged: ubuntu:18.04 Untagged: [email protected]:fd25e706f3dea2a5ff705dbc3353cf37f08307798f3e360a13e9385840f73fb3 Deleted: sha256:2c047404e52d7f17bdac4121a13cd844447b74e13063f8cb8f8b314467feed06
清理镜像
使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。
- -a, -all:删除所有无用镜像,不光是临时镜像;
- -filter filter:只清理符合给定过滤器的镜像;
- -f, -force:强制删除镜像,而不进行提示确认
例如自动清理临时遗留镜像文件层,最后会提示释放的存储空间
[[email protected] ~]# docker image prune -f Total reclaimed space: 0B
创建镜像
创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。
基于已有容器创建
例如,启动一个镜像,并在其中进行修改操作。例如,创建一个test文件,之后退出,代码如下:
[[email protected] ~]# docker run -it ubuntu:18.04 /bin/bash [email protected]:/# to toe top touch [email protected]:/# touch test [email protected]:/# exit [[email protected] ~]# docker commit -m 'add a new file' -a 'worm-c' d6 test:0.1 sha256:e631dedb401061613cf759f80b6b62d83576f4c8b21511c5c3b5b24c7948e107 [[email protected] ~]# 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
[[email protected] ~]# cat centos-7-x86_64-minimal-20170709.tar.xz |docker import - centos:7.0 sha256:1a1cbfa97aa871e243a92dc8fcc16d8df1f421e1443c210416698bb44fb3bd33 [[email protected] ~]# 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 <[email protected]>" 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导入镜像
[[email protected] ~]# docker load -i nginx.tar #也可 docker load < nginx.tar Loaded image: nginx:1.14.2
docker操作容器
创建容器
可以使用docker create命令新建一个容器,例如:
[[email protected] ~]# docker create -it nginx:1.14.2 b9ff064ef24be4a6a2651b888b090e08a6c0866e54597e8d9fd3fe5087d13355 [[email protected] ~]# 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 [[email protected] ~]# docker restart b9 b9
守护进程
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加-d参数来实现
[[email protected] ~]# docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo helloworld;sleep 1;done" 6011437625d867a83d8ccd062f09fccb2b53ed8ad33e12b0716dd0a04edb8742 [[email protected] ~]# docker logs -f 60 helloworld helloworld helloworld helloworld helloworld helloworld helloworld helloworld helloworld helloworld ^C
停止容器
如下:
[[email protected] ~]# docker stop 60 60
进入容器
如下:
[[email protected] ~]# 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 [[email protected] ~]# docker exec -it b9 /bin/bash [email protected]:/# curl
docker数据持久化
- 数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
- 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
创建数据卷
[[email protected] ~]# docker volume create -d local test test [[email protected] ~]# 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
绑定数据卷
[[email protected] www]# docker run --rm -d -p 8081:80 --name nginx-test-web -v /home/nginx/www:/usr/share/nginx/html nginx:1.14.2 [[email protected] www]# docker restart nginx-test-web [[email protected] 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
查看映射端口配置
[[email protected] ~]# 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 [[email protected] ~]# 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" # 挂载配置文件目
**
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023