文章目录
参考
B站视频: 【狂神说Java】Docker最新超详细版教程通俗易懂
Docker概述
参考
原文:http://www.dockerinfo.net/document
概述
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
Docker安装
基本组成
- 镜像(image)
- 容器(container)
- 仓库(repository)
在centOS上安装
环境
- centOS 7
- xshell
查看环境
- 系统内核 3.10 以上,命令:
uname -r
- 系统版本7以上
cat /etc/os-release
安装
参考官网:https://docs.docker.com/engine/install/centos/
- 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 需要的安装包
sudo yum install -y yum-utils
- 设置镜像仓库(国内国外任选其一,更新索引为可选项)
- 国外:(不推荐)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 国内:
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- (可选)更新yum软件包索引:
yum makecache fast
- 出现报错:(报错末尾内容)
failure: repodata/repomd.xml from docker-ce-stable: [Errno 256] No more mirrors to try.
https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/x86_64/stable/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found- 解决
- 进入如下目录,并修改内容:
sudo vi /etc/yum.repos.d/docker-ce.repo
- 将其中的
$releasever
全部替换为7
注:我的当前系统的发行版本是7,可以通过cat /etc/redhat-release
命令查看:
CentOS Linux release 7.9.2009 (Core)- 将其中的
$basearch
全部替换为x86_64
注:我的系统硬件架构是x86_64,可以通过arch
命令查看
- 我修改后的文件如下
[docker-ce-stable] name=Docker CE Stable - x86_64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo x86_64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-x86_64/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-source] name=Docker CE Stable - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test] name=Docker CE Test - x86_64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-debuginfo] name=Docker CE Test - Debuginfo x86_64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-x86_64/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-source] name=Docker CE Test - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly] name=Docker CE Nightly - x86_64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-debuginfo] name=Docker CE Nightly - Debuginfo x86_64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-x86_64/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-source] name=Docker CE Nightly - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
- 安装
sudo yum install docker-ce docker-ce-cli containerd.io
- 启动
sudo systemctl start docker
- (可选)测试:
docker version
- 报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 解决:如果你用的是WSL 2 + CentOS7,可参考我的另一篇文章https://blog.csdn.net/m0_55155505/article/details/122934103
- 测试hello word
sudo docker run hello-world
- 查看镜像
docker images
卸载docker
#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源
rm -rf /var/lib/docker
阿里云镜像加速
-
阿里云首页
https://cn.aliyun.com/ -
登录 -> 控制台 -> 点侧边栏三条横线
-
产品与服务 -> 容器镜像服务 -> 弹性计算 -> 容器镜像服务
-
镜像工具 -> 镜像加速器 -> 操作文档 -> centOS
复制命令,运行
Docker命令
帮助命令
docker version
显示docker版本信息
docker info
显示docker版本信息,包括镜像和容器的数量
- 注:末尾显示如下内容,可忽略
WARNING: No blkio throttle.read_bps_device support WARNING: No blkio throttle.write_bps_device support WARNING: No blkio throttle.read_iops_device support WARNING: No blkio throttle.write_iops_device support
docker 命令 --help
帮助文档
镜像命令
docker images
显示镜像
REPOSITORY:镜像仓库源,TAG:镜像标签,IMAGE ID:镜像id,CREATED:创建时间,SIZE:大小
- -a,–all:列出所有镜像
- -q,-quiet:只显示镜像id
docker search
搜索镜像
- -f,–filter:
docker search mysql -f=stars=10
,搜索mysql、且stars大于等于10
docker pull[:tag]
下载镜像,不指定tag,默认最新
docker rmi -f 镜像id
删除镜像
docker rmi -f $(docker images -aq)
可删除所有镜像
容器命令
- 说明:有了镜像才可以使用容器
docker run [参数] image
例如:docker run -it centos /bin/bash
- –name-“Name”:容器名字,用于区分容器
- -d:后台方式运行,注:如果没有提供服务会自动停止
- -it:使用交换方式运行
- -p:指定容器端口,-p8080:8080,映射主机与容器
- -p ip:主机端口:容器端口
- -p 主机端口:容器端口(常用)
- -p 容器端口
- 容器端口
- -P:随机指定端口
docker ps
列出正在运行的容器
- -a:列出正在运行的容器+历史运行过的容器
- -aq:上述所有容器,显示id
退出容器
exit:直接容器停止退出
ctrl + P + Q:容器不停止退出
删除容器
docker rm 容器id
删除指定容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq)
删除所有镜像
docker ps -a -q|xargs docker rm
也可以删除所有容器
启动和停止容器的操作
docker start 容器id
启动容器
docker restart 容器id
重启容器
docker stop 容器id
停止正在运行的容器
docker kill 容器id
强制停止当前容器
容器的自启动
- 初始运行时候设置自启动:
docker run --restart=always 容器id 或 容器名称
- 正在运行的容器设置自启动:
docker update --restart=always 容器id 或 容器名称
restart多个参数值选择
no
不自动重启容器. (默认值)on-failure
容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:10unless-stopped
在容器已经stop掉或Docker stoped/restarted的时候才重启容器always
在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算
其他常用命令
docker logs
显示日志
docker top 容器id
查容器进程
docker inspect 容器id
产看镜像元数据
docker exec -it 容器id bashShell
进入正在运行的容器,开启一个新的终端;bashShell,例如:/bin/bash
docker attach 容器id bashShell
进入正在运行的容器,不会启动新的进程;bashShell,例如:/bin/bash
docker cp 容器id:文件路径 路径
从容器拷贝文件到主机
练习
部署nginx
- [root@YY liangjiayy]#
docker search nginx
查nginx,也可以去https://hub.docker.com/去搜索
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
bitnami/nginx Bitnami nginx Docker Image 117 [OK]
bitnami/wordpress-nginx Bitnami Docker Image for WordPress with NGINX 55 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 31
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 15 [OK]
rancher/nginx-ingress-controller 9
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
rancher/nginx-ingress-controller-defaultbackend 2
circleci/nginx This image is for internal use 2
bitnami/nginx-exporter 1
rancher/nginx 1
nginx Official build of Nginx. 0 [OK]
rancher/nginx-conf 0
wallarm/nginx-ingress-controller Kubernetes Ingress Controller with Wallarm e… 0
rancher/nginx-ssl 0
ibmcom/nginx-ppc64le Docker image for nginx-ppc64le 0
rancher/nginx-ingress-controller-amd64 0
ibmcom/nginx-ingress-controller-ppc64le Docker Image for IBM Cloud Private-CE (Commu… 0
rancher/nginx-proxy 0
bitnami/nginx-intel 0
wallarm/nginx-ingress-controller-amd64 Kubernetes Ingress Controller with Wallarm e… 0
ibmcom/nginx-ingress-controller-amd64 0
ibmcom/nginx-ingress-controller-s390x 0
kasmweb/nginx An Nginx image based off nginx:alpine and in… 0
wallarm/nginx-amd64 0
- [root@YY liangjiayy]#
docker pull nginx
下载镜像
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
- [root@YY liangjiayy]#
docker run -d -p 3344:80 nginx
-d:后台启动,-p:宿主机端口3344与内部机端口80映射,还可以用
-name
指定容器名称
b13e80bc78fc791719ccf74eef6a5d2be0fad3c6447310f1a62444239920f785
- [root@YY liangjiayy]#
docker ps
查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b13e80bc78fc nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp suspicious_bassi
- [root@YY liangjiayy]#
curl localhost:3344
本机测试,也可用浏览器访问 ip:3344 测试
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
tomcat
-
参考官网https://hub.docker.com/_/tomcat:
docker run -it --rm tomcat:9.0
-it:交互方式运行,–rm:用完就删除容器,适用于测试(按 ctrl + c 可退出)
-
[root@YY liangjiayy]# docker run -it --rm tomcat:9.0
Unable to find image 'tomcat:9.0' locally
9.0: Pulling from library/tomcat
0e29546d541c: Pull complete
9b829c73b52b: Pull complete
cb5b7ae36172: Pull complete
6494e4811622: Pull complete
668f6fcc5fa5: Pull complete
dc120c3e0290: Pull complete
8f7c0eebb7b1: Pull complete
77b694f83996: Pull complete
7662046c36cb: Pull complete
b93639122cb4: Pull complete
Digest: sha256:cd96d4f7d3f5fc4d3bc1622ec678207087b8215d55021a607ecaefba80b403ea
Status: Downloaded newer image for tomcat:9.0
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/openjdk-11
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
16-Feb-2022 03:55:01.007 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.56
16-Feb-2022 03:55:01.031 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Dec 2 2021 14:30:07 UTC
16-Feb-2022 03:55:01.031 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.56.0
16-Feb-2022 03:55:01.031 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
16-Feb-2022 03:55:01.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 5.10.16.3-microsoft-standard-WSL2
16-Feb-2022 03:55:01.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
16-Feb-2022 03:55:01.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/local/openjdk-11
16-Feb-2022 03:55:01.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 11.0.13+8
16-Feb-2022 03:55:01.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
16-Feb-2022 03:55:01.033 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
16-Feb-2022 03:55:01.033 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
16-Feb-2022 03:55:01.162 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
16-Feb-2022 03:55:01.166 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
16-Feb-2022 03:55:01.167 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
16-Feb-2022 03:55:01.176 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
16-Feb-2022 03:55:01.177 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
16-Feb-2022 03:55:01.178 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
16-Feb-2022 03:55:01.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
16-Feb-2022 03:55:01.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
16-Feb-2022 03:55:01.196 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
16-Feb-2022 03:55:01.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
16-Feb-2022 03:55:01.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
16-Feb-2022 03:55:01.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
16-Feb-2022 03:55:01.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
16-Feb-2022 03:55:01.198 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
16-Feb-2022 03:55:01.228 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
16-Feb-2022 03:55:01.228 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
16-Feb-2022 03:55:01.229 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
16-Feb-2022 03:55:01.236 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1k 25 Mar 2021]
16-Feb-2022 03:55:03.735 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
16-Feb-2022 03:55:03.966 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [4777] milliseconds
16-Feb-2022 03:55:04.466 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
16-Feb-2022 03:55:04.467 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.56]
16-Feb-2022 03:55:04.626 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
16-Feb-2022 03:55:04.707 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [738] milliseconds
^C16-Feb-2022 03:55:46.205 INFO [Thread-2] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
16-Feb-2022 03:55:46.211 INFO [Thread-2] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
16-Feb-2022 03:55:46.216 INFO [Thread-2] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
16-Feb-2022 03:55:46.222 INFO [Thread-2] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
- [root@YY liangjiayy]#
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- [root@YY liangjiayy]#
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 6 weeks ago 141MB
tomcat 9.0 b8e65a4d736d 7 weeks ago 680MB
centos latest 5d0da3dc9764 5 months ago 231MB
- [root@YY liangjiayy]#
docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0
-d:后台启动;启动运行
b7d21e10a03f0c500e3aaf6ef3f3c73b873ea32ad8019e535918295d8c9d4834
- [root@YY liangjiayy]#
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7d21e10a03f tomcat:9.0 "catalina.sh run" 6 seconds ago Up 5 seconds 0.0.0.0:3355:3355->8080/tcp tomcat01
- [root@YY liangjiayy]#
docker exec -it tomcat01 /bin/bash
开启一个新的命令窗口进入容器
- root@b7d21e10a03f:/usr/local/tomcat#
ls
BUILDING.txt NOTICE RUNNING.txt lib temp work
CONTRIBUTING.md README.md bin logs webapps
LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist
此时通过浏览器访问:ip:3355,发现404。这是因为所有不必要的都被剔除掉了,但webapps.dist目录下有,只需复制过来
- root@b7d21e10a03f:/usr/local/tomcat#
cp -r webapps.dist/* webapps
将webapps.dist中的文件拷贝到webapps下面,再次访问,发现可以访问到内容
继续执行命令ls webapps
,可得如下内容ROOT docs examples host-manager manager
部署ES+Kibana
- 视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?p=16(目前不了解,先略过)
Docker镜像
docker commit:提交容器成为一个新的副本
- docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[Tag]
命令和git类似!
- 以刚刚创建好的tomcat01为例测试
- 查看一下刚刚的容器
[root@YY liangjiayy]#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7d21e10a03f tomcat:9.0 "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:3355->8080/tcp, :::3355->8080/tcp tomcat01
- 提交
- [root@YY liangjiayy]#
docker commit -m="tomcat01:add webapps" -a="liangjiayy" b7d21e10a03f my_tomcat01:1.0
提交镜像
注:目标镜像名不能有大写字母,例如:
- [root@YY liangjiayy]#
docker commit -m=“"tomcat01:add webapps" -a="liangjiayy" b7d21e10a03f myTomcat01:1.0
会有如下报错invalid reference format: repository name must be lowercase
sha256:26c81f8676b3ed7225af7b5cd10c0cad3d5d22c346e1c7d2df925808b8a3c4cc
3.查一下现在的镜像,发现有自己新创建的
- [root@YY liangjiayy]#
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_tomcat01 1.0 26c81f8676b3 20 seconds ago 685MB
nginx latest 605c77e624dd 6 weeks ago 141MB
tomcat 9.0 b8e65a4d736d 7 weeks ago 680MB
centos latest 5d0da3dc9764 5 months ago 231MB
容器数据卷
容器持久化和同步操作!容器间也是可以数据共享的
使用
- 方式一:直接用命令来挂载:
docker run -it -v 主句目录:容器目录
例如:
[root@YY liangjiayy]# docker run -it -v /home/centos02:/home centos
-v 主机目录:容器内目录
可在任意一边创建or删除文件,在另一边查看
可通过docker inspect centos
命令查看元数据
- 方式二:docker file 构建镜像直接进行挂载
实战-mysql
- 官网:https://hub.docker.com/_/mysql
- 运行如下命令
- 参考狂神:
docker run -p 3310:3306 --name msql5.7 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7
- 参考尚硅谷:https://www.bilibili.com/video/BV1np4y1C7Yf?p=10(多挂载了一个/var/log/mysql目录)
docker run -p 3306:3306 --name mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-v:挂载;-e:环境,指定了root用户的密码;
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
b0be329fe32ae0b0480f82509f25e16313e6a56ca386dd43c10a3505f1369565
就算删除这个容器,数据依然存在!
具名和匿名挂载
- 匿名挂载
docker run -v 容器内路径 …
只指定容器内的目录,没有指明与之对应在主机的目录
可通docker volume ls
命令查看
一般默认挂载在/var/lib/docker/volumes/
xxx/_data目录下
- 具名挂载
docker run -v 卷名:容器内路径 …
既指定主机目录,又指定容器内的目录
可以方便的找到卷
- 指定路径挂载
docker run -v /主机路径:容器内路径 …
- 拓展
-v 容器内路径:ro rw可改变读写权限
ro: readonly,只读,只能通过宿主机操作,容器内无法操作
rw: read write,可读可写
数据卷容器
两个容器之间的挂载
- docker run … --name docker02 --volumes-from docker01 image
把docker02挂载到docker01上;image 如 centos:5.7
- 生命周期:一直到没有容器使用为止
DockerFile
用来构建docker镜像的文件!命令参数脚本
基础知识
- 每个保留关键字(指令)都必须是大写字母
- 执行从上到下顺序执行
- #表示注释
- 每个指令都会创建提交一个新的镜像层,并提交
构建步骤
- 编写 dockerfile 文件
- docker build 构建为一个镜像
- docker run 运行镜像
- docker push 发布镜像
dockerfile 是面向开发的,逐渐成为企业交付的标准
dockerfile: 构建文件,定义一切的步骤,源代码
dockerImages:通过dockerFile构建生成的镜像,最终发布运行产品
docker容器:镜像运行起来提供服务
dockerfile 指令
FROM
指定基础镜像
MAINTAINER
指定作者,姓名 + 邮箱
RUN
执行命令
ADD
添加文件
COPY
复制文件
用法和ADD相同
WORKDIR
配置工作目录
VOLUME
挂载本地目录或文件
EXPOSE
暴露端口
CMD
容器启动命令;
容器启动时执行的命令,只有最后一个生效
ENTRYPOINT
容器启动执行命名,直接追加
ENTRYPOINT和CMD语法相同,区别在于:
- CMD的命令会被docker run的参数覆盖
如:cmd命令是ls -a
,运行时使用的命令是docker run -l ...
,则cmd的命令会被替换成-l
而不是ls -al
- ENTRYPOINT会把参数追加在原命令后面
如:ENTRYPOINT原命令是ls -a
,运行时命令为docker run -l ...
,则ENTRYPOINT新的命令是ls -al
ONBUILD
配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令
ENV
设置环境变量
1)具有传递性,也就是当前镜像被用作其它镜像的基础镜像时,新镜像会拥有当前这个基础镜像所有的环境变量
2)ENV定义的环境变量,可以在dockerfile被后面的所有指令(CMD除外)中使用,但不能被docker run 的命令参数引用
创建自己的centos
- 新建文件并编辑
vi mycentos
编辑内容如下
FROM centos:7
MAINTAINER ljy<1@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----------end------------"
CMD /bin/bash
-
docker build 构建为一个镜像,命令:
docker build -f mycentos -t mycentos:1.0 .
- 如果使用的centos8,会出现如下报错:
Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist
- 如果使用的centos8,会出现如下报错:
-
docker run 运行镜像
docker run -it mycentos:1.0
可测试vim是否安装成功,输入
vim --help
-
docker push 发布镜像(本文后面)
- 其他命令
docker history 镜像id查看一个镜像的构建过程
发布镜像
注: 未制作tomcat镜像,以上面制作的mycentos镜像为例发布
发布到docker hub
-
登录,命令:docker login -u 用户名
例如我的是:
docker login -u liangjiayy
-
发布镜像
-
3.1 先增加标签,命令:
docker tag 镜像id 用户名(docker hub)/镜像名:[tag]
例如,我的是:
docker tag 51561cfc3e65 liangjiayy/mycentos:1.0
注:我的镜像有:
[root@YY ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 1.0 51561cfc3e65 17 hours ago 414MB ...
-
3.2 发布到docker hub,命令:
docker push 用户名(docker hub)/镜像名:[tag]
例如,我的是:
docker push liangjiayy/mycentos:1.0
The push refers to repository [docker.io/liangjiayy/mycentos] d894ad333fb9: Pushed 174f56854903: Pushed 1.0: digest: sha256:3c7b47fb28f67b8cdfee0d80f1d833a4e3bd41a11577c8a1a2ebf436970e0b94 size: 741
网页端登录docker hub,点击Repositories ,可以看到刚刚发布的镜像
- 退出登录
docker logout
发布到阿里云容器服务
- 登录阿里云:https://cn.aliyun.com
- 找容器镜像服务
- 点右上角控制台
- 点最左边的三条横线
- 找容器镜像服务
- 如果是这样的,点个人认证,按提示新建一个
- 进入个人实例
- 新建命名空间(一个账号最多可以创建 3 个命名空间)
- 创镜像仓库,填入必填项,点下一步
创建本地仓库
- 官方步骤:
登录阿里云Docker Registry
$ docker login --username=liangj**** registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/ljy-docker/test:[镜像版本号]将镜像推送到Registry
$docker login --username=liangj**** registry.cn-hangzhou.aliyuncs.com
$docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ljy-docker/test:[镜像版本号]
$docker push registry.cn-hangzhou.aliyuncs.com/ljy-docker/test:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 “docker push” 命令将该镜像推送至远程。
$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816