今天遇到了点意外,导致我不得不花了重新安装我的docker!心痛!
众所周知,作为一名开发者,有一台趁手的笔记本电脑是必不可少的,而我…今天不得不跟陪伴我六年的笔记本说再见了… ,最近全国范围内都在下大雨,想必大家都感受到,今天我骑着车去另一个项目组时,路过一个桥梁过道不怎么平稳,不小心把斜跨的双肩包掉积水里了,事实再一次说明,买双肩包要买一个防水的!!!!然后,当我把我的小破包捞起来的时候,里面已经全部灌满了,好不容易到了项目组,一堆人围着跟了我六年的笔记本尸体
文章目录
前言
- 众所周知,作为一名开发者,有一台趁手的笔记本电脑是必不可少的,而我…今天不得不跟陪伴我六年的笔记本说再见了… ,最近全国范围内都在下大雨,想必大家都感受到,今天我骑着车去另一个项目组时,路过一个桥梁过道不怎么平稳,不小心把斜跨的双肩包掉积水里了,事实再一次说明,买双肩包要买一个防水的!!!!然后,当我把我的小破包捞起来的时候,里面已经全部灌满了,好不容易到了项目组,一堆人围着跟了我六年的笔记本尸体,纷纷提出了各种解决进水的方案…可惜最后还是无济于事,只好花了六千大洋又买了个拯救者的本子…
- 现在的话不得不重新弄一套开发环境了,还是按照我最喜欢的docker先来,在使用中加深理解!
谈谈docker是什么
- 用了这么多年了,docker的官方说法就是一个开源的容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源(没深入研究过Go)。
- Docker 可以打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- Docker 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔离,互不影响
什么是沙箱?
- 沙箱是一种用于隔离和管理网络环境的虚拟环境。它模拟网络中的真实场景,并提供对网络资源的限制和监控。
- 沙箱可以提供一些虚拟的硬件和软件资源,如文件系统、网络、操作系统等,使应用程序或进程可以在这个虚拟环境中运行,而不会对计算机系统产生任何不良影响
- 在沙箱中,如果应用程序或进程试图访问沙箱之外的资源或执行危险操作,沙箱会拦截这些请求并采取相应的安全措施,例如禁止该操作或中止应用程序或进程。
沙箱的功能
- 隔离性:沙箱提供了⼀个完全隔离的环境,使用户可以安全地运行不受信任的应用程序或文件。任何在沙箱中运行的应用程序或文件都无法访问主机操作系统或其他应用程序的敏感数据。
- 临时性:每次启动沙箱时,都会创建⼀个全新的操作系统实例。这意味着任何在沙箱中进行的更改、下载的文件或安装的应用程序都将在关闭沙箱后被完全删除,不会对主机系统产生任何影响。
- 安全性:沙箱中的操作系统实例是在主机操作系统的基础上创建的,因此可以利用主机操作系统的安全功能和更新机制来提供更高的安全性。
- 快速启动:沙箱的启动非常迅速,几乎可以立即进⼊隔离环境,无需等待长时间的系统启动过程。
- 兼容性:沙箱可以运行几乎任何应用程序,包括浏览器、办公套件、开发工具等。用户可以在沙箱中进行各种测试、评估和试验,而无须担心对主机系统的影响。
沙箱组件
- 虚拟化引擎:用于创建和管理虚拟环境,包括虚拟化硬件、操作系统和应用程序等。
- 安全隔离机制:用于隔离不同的用户或应用程序,并提供安全访问控制和审计功能。
- 网络资源管理:用于限制和监控用户或应用程序对网络资源的访问,包括网络带宽、IP地址、端口和服务等。
- 安全监控和分析:用于对用户或应用程序的网络行为进行监控和分析,以发现潜在的威胁和攻击。
docker 基本概念
- 宿主机:安装Docker守护进程的服务器,称之为宿主机(我这里用的是windows server 环境的服务器);
- 镜像(Image):Docker 镜像,就相当于是一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数
- 容器(Container):镜像运行之后的实体,镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个镜像控制中心,用来保存镜像。
Docker常用命令
-
查看镜像:
docker imagesPS C:\Users\Administrator> docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 3218b38490ce 2 years ago 516 MB PS C:\Users\Administrator> -
搜索镜像 :
docker search imageNamePS C:\Users\Administrator> docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relati... 15219 [OK] mariadb MariaDB Server is a high performing open s... 5789 [OK] phpmyadmin phpMyAdmin - A web interface for MySQL and... 1004 [OK] percona Percona Server is a fork of the MySQL rela... 629 [OK] bitnami/mysql Bitnami container image for MySQL 113 [OK] ubuntu/mysql MySQL open source fast, stable, multi-thre... 64 linuxserver/mysql A Mysql container, brought to you by Linux... 41 circleci/mysql MySQL is a widely used, open-source relati... 30 rapidfort/mysql RapidFort optimized, hardened image for MySQL 25 google/mysql MySQL server for Google Compute Engine 25 [OK] rapidfort/mysql-official RapidFort optimized, hardened image for My... 9 rapidfort/mysql8-ib RapidFort optimized, hardened image for My... 9 bitnami/mysqld-exporter Bitnami container image for MySQL Server E... 7 cimg/mysql 3 newrelic/mysql-plugin New Relic Plugin for monitoring MySQL data... 1 [OK] elestio/mysql Mysql, verified and packaged by Elestio 0 newrelic/k8s-nri-mysql New Relic Infrastructure MySQL Integration... 0 airbyte/normalization-mysql 0 hashicorp/mysql-portworx-demo 0 bitnami/percona-mysql Bitnami container image for Percona MySQL 0 airbyte/destination-mysql 0 percona/percona-server-mysql-operator 0 airbyte/source-mysql 0 bitnamicharts/mysql 0 airbyte/source-mysql-strict-encrypt 0 PS C:\Users\Administrator> -
拉取镜像:
docker pull imageName:version,不写版本号默认拉去是最新的PS C:\Users\Administrator> docker pull jdk8 -
按镜像ID删除镜像,
docker rmi 镜像IDdocker images -q #查看所有镜像的ID docker rmi `docker images -q` #批量删除镜像 -
查看正在运行的容器:
docker ps,此时没有运行任何容器PS C:\Users\Administrator> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PS C:\Users\Administrator>- 查看所有容器(包括正在运行的和已经停止运行的):
docker ps -a和docker ps -all
- 查看所有容器(包括正在运行的和已经停止运行的):
-
查看最后一次运行的容器
PS C:\Users\Administrator> docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5192790464d1 mysql "docker-entrypoint..." 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp friendly_elion PS C:\Users\Administrator> -
查看已经停止的容器:
docker ps -f status=exitedPS C:\Users\Administrator> docker ps -f status=exited CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fc920014bb52 mysql "docker-entrypoint..." 6 minutes ago Exited (1) 6 minutes ago laughing_lewin 6096aaf82fd4 mysql "docker-entrypoint..." 12 minutes ago Exited (1) 12 minutes ago sleepy_poitras c9c7993e8d5f mysql "docker-entrypoint..." 22 hours ago Exited (0) 20 hours ago mysql-test PS C:\Users\Administrator>
创建与启动容器
-
创建一个容器 :
docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqlPS C:\Users\Administrator> docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 5192790464d1823934a67b88b0332d6f1e34e239cfaef25b8b64564b821b8c5d PS C:\Users\Administrator> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5192790464d1 mysql "docker-entrypoint..." 22 seconds ago Up 21 seconds 3306/tcp, 33060/tcp friendly_elion -
docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql,这个命令的格式是:docker run 命令参数 镜像名称:镜像标签,命令参数:
1.-i:表示运行容器,如果不加该参数那么只是通过镜像创建容器,而不启动。
2.-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果只加it两个参数,创建后就会自动进去容器)。
3.-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
4.--name:为创建的容器命名。
5.-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
6.-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射,例如:可以将Docker中Tomcat容器的8080端口映射到宿主机上的某一个端口8080,那么以后访问tomcat只需要:http://宿主机的IP:8080/
交互式容器
-
使用交互式运行容器,容器运行后直接进入到容器内部,退出容器内部后,容器直接关闭,只有第一次才会这样,以后再启动容器就是一个守护式的。
PS C:\Users\Administrator> docker run -it mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 2024-07-12 06:27:01+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started. Enter password:
守护式容器
-
docker run -di --name=容器名称PS C:\Users\Administrator> docker run -di mysql -name mysql 6462a2709abf141a392adefd8eb2341d566a42be6025db2f9bf087056670ba57 -
登录容器/进入容器的目录,注意:这里的登陆容器之后执行的脚本/bin/bash必须写
docker exec -it 容器名称 (或者容器ID) /bin/bash -
停止容器:
docker stop 容器名称(或者容器ID)PS C:\Users\Administrator> docker stop 5192790464d1 5192790464d1 PS C:\Users\Administrator> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PS C:\Users\Administrator> -
启动容器:
docker start 容器名称(或者容器ID)PS C:\Users\Administrator> docker start mysql-test mysql-test PS C:\Users\Administrator> -
查看容器IP地址 :
docker inspect 容器名称(容器ID)PS C:\Users\Administrator> docker inspect mysql-test ........ "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "314a2b4838fa222950b2cda21ffd28875e2b55989167c684ee7e36e2dbd4a9de", "EndpointID": "5d6feec4ead7d32ae94224cdb02cff514860863300aa6858b623ec41dbe9e4e3", "Gateway": "172.17.0.1", 网关地址 "IPAddress": "172.17.0.2", IP地址 "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" MAC地址 } } -
删除容器,正在运行的容器无法删除:
#删除容器 docker rm 容器名称(容器ID) #删除镜像 docker rmi 镜像ID(镜像名称)
Windows 下部署docker
安装 Hyper-V
- Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这是 Docker Desktop for Windows 所使用的虚拟机
- Hyper-V 虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!
开启 Hyper-V
- 找到应用和功能

- 找到程序和功能,找到启动或关闭Windows 功能,选中Hyper-V

docker 的安装
- 找个docker的安装包,然后一路Next ,点击Finish 完成安装

安装完毕以后,会有一个docker的小图标,这个情况就是安装成功了
双击运行即可,此时呢,运行ok了可以看到右下角有一个 docker标志,
也可以通过cmd进入命令行,查看一下docker 版本信息:docker --version
docker 部署jdk
-
指定版本的tag镜像的jdk:
docker pull primetoninc/jdk:1.8 -
启动jdk容器(其中,– name=后的jdk1.8是为容器指定了一个别名,而最后的primetoninc/jdk:1.8那个指的是下载镜像时的名称。)该命令的意思为:使用docker镜像primetoninc/jdk:1.8以后台模式启动一个容器,并将容器命名为jdk1.8:
docker run -it --name jdk1.8 -d primetoninc/jdk:1.8 -
进入jdk容器,查看是否安装正确(即查看安装之后的目录)
PS C:\Users\Administrator> docker exec -it jdk1.8 /bin/bash [root@598e430fbee5 /]# java -version java version "1.8.0_152" Java(TM) SE Runtime Environment (build 1.8.0_152-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode) [root@598e430fbee5 /]#
docker 部署mysql
- docker 安装成功后,首先就是安装mysql 喽,可以使用
docker search mysql命令来查看可用版本

- 我这边跟随项目组mysql版本,在本地部署 mysql 8.0.18 版本的mysql,拉去命令为:
docker pull mysql:8.0.18,默认是从docker官方的镜像仓库拉取docker,出现如下界面表示拉取失败

-
为docker 更换阿里云docker 镜像源头,我这里使用的阿里云的镜像源,找到 setting 如下图

-
这个阿里云镜像源地址:需要登录阿里云官网,搜索容器镜像服务,找到容器加速器 ,即可获得(如果没有,自行注册一个)

-
使用
docker images查看是否安装了mysql ,能看到有mysql 就表示OK了PS C:\Users\Administrator> docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 3218b38490ce 2 years ago 516 MB PS C:\Users\Administrator> -
安装完成后,测试运行 mysql 容器:
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql-p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
PS C:\Users\Administrator> docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql c9c7993e8d5feb2f3622ecb7d9c71939d6059f59dccddb4f861a54ed0e499561 PS C:\Users\Administrator> -
通过
docker ps命令查看是否运行成功:PS C:\Users\Administrator> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9c7993e8d5f mysql "docker-entrypoint..." About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-test PS C:\Users\Administrator> -
此时可以通过连接工具开始使用mysql了,也可以通过 docker exec -it mysql /bin/bash 命令操作mysql
PS C:\Users\Administrator> docker exec -it mysql /bin/bash root@1421d99469ae:/# show databases; bash: show: command not found root@1421d99469ae:/# mysql -uroot -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.27 MySQL Community Server - GPL Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
docker 部署Tomcat
-
搜索tomcat 镜像:
docker search tomcatPS C:\Users\Administrator> docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementa... 3680 [OK] tomee Apache TomEE is an all-Apache Java EE cert... 115 [OK] bitnami/tomcat Bitnami container image for Tomcat 50 [OK] lucee/lucee Lucee application engine running on Apache... 31 lucee/lucee52-nginx Lucee 5.2 with NGINX running on Apache Tom... 11 [OK] lucee/lucee4-nginx Lucee 4.5 with NGINX running on Apache Tom... 11 [OK] eclipse/rdf4j-workbench Dockerfile for Eclipse RDF4J Server and Wo... 9 lucee/lucee4 Lucee 4.5 application engine running on Ap... 8 [OK] lucee/lucee52 Lucee 5.2 application engine running on Ap... 3 [OK] rancher/haproxy-tomcat 1 openidentityplatform/openam-j2ee-agent-tomcat OpenAM Java EE Policy Agent for Apache Tomcat 1 jumpserver/tomcat Apache Tomcat is an open source implementa... 0 chainguard/tomcat Build, ship and run secure software with C... 0 rapidfort/tomcat10-openjdk17-ib 0 samply/tomcat-common 0 wnprcehr/tomcat 0 paketobuildpacks/apache-tomcat 0 hivdb/tomcat-with-nucamino 0 openeuler/tomcat 0 bitnamicharts/tomcat 0 library123/tomcat 0 vulhub/tomcat 0 secoresearch/tomcat-varnish Tomcat and Varnish 5.0 0 [OK] rapidfort/tomcat9-openjdk11-ib RapidFort optimized, hardened image for To... 0 semoss/docker-tomcat Tomcat, Java, Maven, and Git on top of debian 0 [OK] -
拉取tomcat 镜像:
docker pull tomcat:8-jdk8PS C:\Users\Administrator> docker pull tomcat:8-jdk8 8-jdk8: Pulling from library/tomcat 0e29546d541c: Pull complete 9b829c73b52b: Pull complete cb5b7ae36172: Pull complete 6494e4811622: Pull complete 668f6fcc5fa5: Pull complete c0879393b07e: Pull complete bef50c41a74d: Pull complete 0bcabf45ee90: Pull complete 6e2e221e1126: Pull complete 57f0208b026f: Pull complete Digest: sha256:8e0b9f9bc861047193a763404317a704902737f9a4b32a305f22c180709aa9ce Status: Downloaded newer image for tomcat:8-jdk8 PS C:\Users\Administrator> -
创建容器,设置端口映射 :
docker run -itd --name=tomcat -p 8080:8080 tomcat:8-jdk8- -p 8080:8080:将容器的8080端口映射到主机的8080端口
docker 部署Nginx
-
搜索 Nginx 镜像:
docker search NginxPS C:\Users\Administrator> docker search Nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 19996 [OK] bitnami/nginx Bitnami container image for NGINX 192 [OK] nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 154 nginxproxy/nginx-proxy Automated nginx proxy for Docker container... 140 nginxproxy/acme-companion Automated ACME SSL certificate generation ... 134 ubuntu/nginx Nginx, a high-performance reverse proxy & ... 114 nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers ... 92 nginx/unit This repository is retired, use the Docker... 63 nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NG... 42 bitnami/nginx-ingress-controller Bitnami container image for NGINX Ingress ... 34 [OK] unit Official build of NGINX Unit: Universal We... 32 [OK] nginxproxy/docker-gen Generate files from docker container meta-... 17 kasmweb/nginx An Nginx image based off nginx:alpine and ... 8 nginxinc/nginx-s3-gateway Authenticating and caching gateway based o... 6 bitnami/nginx-exporter Bitnami container image for NGINX Exporter 5 nginxinc/ingress-demo Ingress Demo 4 nginx/nginx-ingress-operator NGINX Ingress Operator for NGINX and NGINX... 2 rancher/nginx 2 nginxinc/amplify-agent NGINX Amplify Agent docker repository 1 nginx/nginx-quic-qns NGINX QUIC interop 1 nginxinc/ngx-rust-tool 0 nginxinc/mra_python_base 0 nginxinc/mra-fakes3 0 nginx/unit-preview Unit preview features 0 -
拉取Nginx 镜像:
docker pull nginx -
创建容器,设置端口映射:
docker run -di --name=mynginx -p 80:80 nginx
docker 部署 redis
-
搜索redis镜像:docker search redis
PS C:\Users\Administrator> docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is the world’s fastest data platform... 12898 [OK] redis/redis-stack redis-stack installs a Redis server with a... 111 redislabs/redisinsight RedisInsight - The GUI for Redis 103 redis/redis-stack-server redis-stack-server installs a Redis server... 77 redislabs/redisearch Redis With the RedisSearch module pre-load... 66 redislabs/rejson RedisJSON - Enhanced JSON data type proces... 53 redislabs/redismod An automated build of redismod - latest Re... 48 [OK] redislabs/redis Clustered in-memory database engine compat... 40 redislabs/redisgraph A graph database module for Redis 27 [OK] redislabs/rebloom A probablistic datatypes module for Redis 27 [OK] redislabs/redistimeseries A time series database module for Redis 12 redis/redisinsight Redis Insight - our best official GUI for ... 10 redislabs/operator 7 redislabs/redisai 6 redislabs/redis-webcli A tiny Flask app to provide access to Redi... 5 [OK] redislabs/redis-py 5 redislabs/redisgears An automated build of RedisGears 4 redislabs/k8s-controller 2 redislabs/operator-internal This repository contains pre-released vers... 1 redislabs/olmtest Test artefact for OLM CSV 1 redislabs/ng-redis-raft Redis with redis raft module 0 redislabs/k8s-controller-internal 0 redislabs/pcf-redis-enterprise-tester 0 redislabs/memtier_benchmark Docker image to run memtier_benchmark 0 redislabs/olm-bundle 0 PS C:\Users\Administrator> -
拉取redis镜像:
docker pull redis -
创建容器,设置端口映射:
docker run -id --name=myredis -p 6379:6379 redis
docker 数据卷
- 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。
- 数据卷本质其实是共享文件夹,是宿主机与容器间数据共享的桥梁
- 数据卷作用就是用于容器数据持久化,外部机器和容器间接通信以及容器之间数据交换
docker 文件拷贝
-
继续写写docker文件是怎么回事,首先,docker 是安装在宿主机中的,但是宿主机的文件是需要拷贝到容器内才能被docker 识别到的,拷贝进入容器的命令:
docker cp 需要拷贝的文件或目录 容器名称:容器目录D:\docker>docker cp docker_tomcat_test.html f7a0ef59e755:/usr/local/tomcat/webapps D:\docker>docker exec -it c_tomcat /bin/bash root@f7a0ef59e755:/usr/local/tomcat# ls BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work root@f7a0ef59e755:/usr/local/tomcat# cd webapps root@f7a0ef59e755:/usr/local/tomcat/webapps# ls docker_tomcat_test.html root@f7a0ef59e755:/usr/local/tomcat/webapps# -
拷贝出来的命令:
docker cp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载
-
文件拷贝操作起来也是比较简单的,但是呢,通常情况下,我还是使用目录挂载的方式民间宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器
-
目录挂载命令:创建容器 添加-v参数 后边为 宿主机目录:容器目录 例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=c_tomcat tomcatD:\docker>docker run -itd --name=centos -v \docker\centos\centos_data:/root/centos_data centos:7 /bin/bash 8806e76921d5cd0b1134051828fda833468e3257e4dcdd6e08ff0dfbd78cfe25
查看容器已挂载的数据卷
-
查看容器中挂载的数据卷:
docker inspect 容器名称(容器ID)D:\docker>docker inspect centos .......... "Mounts": [ { "Type": "bind", "Source": "/docker/centos/centos_data", "Destination": "/root/centos_data", "Mode": "", "RW": true, "Propagation": "" } ], "Config": {
一个容器挂在多个数据卷
D:\docker>docker run -di --name=centos2 -v /centos1/centos_data1:/root/centos_data1 -v /centos1/centos_data2:/root/centos_data2 centos:7 /bin/bash
f5cae7dde50b9115804514f355ed2965482100ad27d60456c2166b1bba66131c
多个容器挂载1个数据卷实现数据共享
docker run -di --name=c2 -v /root/host_data_common:/root/c2_data centos:7
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7
##创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7 /bin/bash
##创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -di --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -di --name=c2 --volumes-from c3 centos:7 /bin/bash
docker 迁移与备份
- 将本地开发环境下的Docker中对应的容器持久化为镜像
- 将镜像保存为一个压缩包,发送到生产环境服务器中
- 生产环境中需要将压缩包–>镜像–>容器
将容器保存为镜像
-
保存命令:
docker commit {正在运行容器名称/容器ID} {镜像名称}:{镜像标签}D:\docker>docker commit mysql-test mysql-test:version_1.0 sha256:04ee31d8a90541d3a9acca06f5e35db60c6fa487ed748cb1f0fe58d77d2adf93 D:\docker>docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql-test version_1.0 04ee31d8a905 39 minutes ago 516 MB nginx latest 605c77e624dd 2 years ago 141 MB tomcat 8-jdk8 bb364d522f0c 2 years ago 545 MB mysql latest 3218b38490ce 2 years ago 516 MB centos 7 eeb6ee3f44bd 2 years ago 204 MB primetoninc/jdk 1.8 f4b4fccc65bb 6 years ago 657 MB D:\docker>
镜像备份
-
可以将将镜像保存为tar 文件:
docker save -o {压缩包存放路径} {镜像名称/镜像ID}docker save -o mysql-test.tar mysql-test:version__1.0 #压缩包在生产环境下会还原为一个 image,还原之后的name和tag # -o :输出到的文件
镜像恢复与迁移
-
首先删除掉 mysql-test镜像 然后执行此命令进行恢复
docker load -i {备份的镜像文件} # 举例 docker load -i mysql-test.tar # -i :指定导入的文件 -
执行后再次查看镜像,可以看到镜像已经恢复,可以再次运行测试
更多推荐
所有评论(0)