Docker
前言-知道的越多,不知道的就越多!
文章目录
Docker 能干嘛?
容器化技术
容器化不是模拟的一个完整的操作系统
Docker的基本组成
镜像(image)
docker镜像就好比一个模板,通过这个模板创建容器服务。
容器(container)
docker容器技术,独立运行一个或一组应用,通过镜像来创建的,启动停止删除,基本命令
仓库(Respositity)
仓库就是存放镜像的地方。
仓库有公有仓库和私有仓库。
Docker安装
基于ubuntu
1、卸载旧Docker
$ sudo apt-get remove docker docker-engine docker.io containerd runc
2、更新apt
软件包索引并安装软件包以允许apt
通过HTTPS使用存储库:
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
3、添加Docker的官方GPG密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
4、使用以下命令来设置稳定的存储库。
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
5、安装Docker引擎更新apt
程序包索引,并安装最新版本的Docker Engine和容器
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
6、通过运行hello-world
映像来验证是否正确安装了Docker Engine 。
#查看docker的版本
$ sudo docker version
#查看运行hello-world镜像
$ sudo docker run hello-world
#查看docker的镜像
$ sudo docker images
使用国内 daocloud 一键安装命令:curl -sSL https://get.daocloud.io/docker | sh
7、卸载Docker Engine,CLI和Containerd软件包:
$ sudo apt-get purge docker-ce docker-ce-cli containerd.io
主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
$ sudo rm -rf /var/lib/docker
您必须手动删除所有已编辑的配置文件。
centos 安装
1、卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、使用存储库安装
$ sudo yum install -y yum-utils
#配置阿里云镜像
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装最新版本的Docker Engine和容器,或转到下一步以安装特定版本
$ sudo yum install docker-ce docker-ce-cli containerd.io
4、启动Docker
$ sudo systemctl start docker
#让Docker容器随宿主机的启动而自动启动
$ systemctl enable docker.service
5、通过运行hello-world
映像来验证是否正确安装了Docker Engine 。
$ sudo docker run hello-world
阿里云镜像加速
1、登录 阿里云选择镜像与服务
2、设置登录密码
3、选择镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nskp0wed.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
执行四条命令
run的指行流程
Docker 底层原理
Docker是怎么工作的
Docker是一个Cline-server结构体系,Docker的守护进程运行在主机上。通过Socket从客户端访问!DockerServer接收到Docker_Client的指令就会指行这个指令
Docker为什么比VM快
1、Docker比虚拟机更少的抽象层
2、Docker 利用的是宿主机的内核,VM需要Guest OS,所以说新建一个容器的时候,Docker不需要从新加载一个操作系统的内核。
Docker常用命令
帮助命令
docker version #显示Docker的详细信息
docker info #显示Docker 的系统信息,包括镜像和容器数
docker 命令 --help # 帮助命令
帮助文档的地址:https://docs.docker.com/reference/
镜像命令
查看所有镜像
docker images # 查看docker所有镜像
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID。
搜索镜像
docker search 镜像名 #搜索镜像
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。
--filter=stars=3000 :搜索出来的镜像都是starts大于3000
下载镜像
docker pull 镜像名[:version] #下载镜像
Using default tag: latest #如果不加tag,则下载最新的
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
#指定版本下载
docker pull mysql:5.7
删除镜像
docker rmi -f 镜像id
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
docker rmi -f $(docker images -aq) #删除所有的镜像
容器命令
我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
创建容器并启动
docker run [可选参数] image
--name="nginx-lb": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口 -p 8080:8080 -p 主机端口:容器端口
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
测试:docker run -it centos /bin/bash
root@iZnn5svpfx2rfxZ:~# docker run -it centos /bin/bash
[root@a6ec694e22a1 /]# ls #这个进入的是服务器内部
exit #用来退出
列出所有正在运行的容器
docker ps # 列出所有正在运行的容器
-a :显示所有的容器,包括未运行的。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
退出容器
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 #强制停止容器
常用的其他命令 run -d
后台启动容器
docker run -d 容器名 #后台启动容器
查看日志命令-logs
docker logs
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
查看容器进程 top
docker top 容器ID #查看容器中运行的进程信息,支持 ps 命令参数。
查看容器的元数据 inspect
docker inspect
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
进入当前运行的容器 exec attach
# 我们通常容器都是后台运行的,修改一些配置
#方式一
docker exec -it 容器ID
docker exec -it 4368819b255f /bin/bash
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
#方式二
docker attach 容器ID
从容器内拷贝文件到主机上 pc
docker pc 容器ID:容器内路径 目的主机的路径
docker cp 81d3e333089b:/test.java /home
Docker安装Nginx
# 搜索镜像
docker search nginx
#拉取镜像
docker pull nginx
#查看拉取的镜像
docker images
#后台运行容器并命名 -d代表后台运行 --name起别名 -p暴露端口 容器里的端口:外部端口 nginx镜像名
docker run -d --name nginx01 -p 3344:80 nginx
# 搜索镜像
root@iZnn5svpfx2rfxZ:/home# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14291 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1941 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 801 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 139
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 132
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 109 [OK]
bitnami/nginx Bitnami nginx Docker Image 93 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 86 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 82 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 65 [OK]
nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 46
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 44 [OK]
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 28
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 [OK]
staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 16 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 15
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter 15
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
raulr/nginx-wordpress Nginx front-end for the official wordpress:f… 13 [OK]
flashspys/nginx-static Super Lightweight Nginx Image 8 [OK]
mailu/nginx Mailu nginx frontend 8 [OK]
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 7 [OK]
bitwarden/nginx The Bitwarden nginx web server acting as a r… 7
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 2 [OK]
wodby/nginx Generic nginx 1 [OK]
#拉取镜像
root@iZnn5svpfx2rfxZ:/home# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a076a628af6f: Pull complete
0732ab25fa22: Pull complete
d7f36f6fe38f: Pull complete
f72584a26f32: Pull complete
7125e4df9063: Pull complete
Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
#查看拉取的镜像
root@iZnn5svpfx2rfxZ:/home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6d0b4767a6c 44 hours ago 133MB
centos latest 300e315adb2f 5 weeks ago 209MB
Run a command in a new container
#后台运行容器并命名
root@iZnn5svpfx2rfxZ:/home# docker run -d --name nginx01 -p 3344:80 nginx
ce2e256db951050da874d1c264b2eb8614d6a60fa1abec38bab293b0478a8037
#测试
root@iZnn5svpfx2rfxZ:/home# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
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>
Docker安装Tomcat
#运行创建镜像
docker run -it tomcat:9.0
#运行创建镜像,用完即删 用于测试
docker run -it --rm tomcat:9.0
#后台运行容器并命名 -d代表后台运行 --name起别名 -p暴露端口 容器里的端口:外部端口 tomcat镜像名
docker run -d -p 8080:8080 --name tomcat01 tomcat:9.0
# 这个tomcat没有webapps
可视化
portainer
Rancher
什么是portainer?
docker 图形化面板。
安装portainer
Commit镜像
docker commit #提交一个容器成为一个新的副本
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
容器数据卷
什么是容器数据卷
将应用和环境打包成一个镜像!数据需要持久化!可以将数据存下来,数据共享的技术!
把Doc客人容器中产生的技术同步到本地!
容器持久化和同步操作,容器间数据也是共享的。
方式一:直接通过命令来挂载
docker run -it -v 主机目录:容器内目录 镜像名
docker run -it -v /home/ceshi:/home centos /bin/bash
部署mysql
mysql 数据持久化的问题
#拉取镜像
docker pull mysql
#运行mysql容器 需要挂载数据!设置密码 -e 表示配置环境
# -d 后台运行
# -p 配置端口
# -v 数据挂载
# -e 环境配置 MYSQL_ROOT_PASSWORD必须大写
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='123456' --name mysql8 --privileged=true mysql
#查看运行的容器
docker ps
#进入到mysql
docker exec -it 容器Id /bin/bash
#输入mysql的登录
mysql -uroot -p
docker安装Jenkins
#拉去镜像
[root@chenbin ~]# docker pull jenkins/jenkins
Using default tag: latest
latest: Pulling from jenkins/jenkins
0bc3020d05f1: Pull complete
ee3587ec32c3: Pull complete
0bd0b3e8a1ee: Pull complete
7b5615a9059c: Pull complete
62980ab719b4: Pull complete
ee9399291836: Pull complete
1a40e67771e3: Pull complete
ee53ed120856: Pull complete
34f2dd2cbb3e: Pull complete
70625628bb19: Pull complete
52967d83ef48: Pull complete
488b4fe169de: Pull complete
bd260a926aeb: Pull complete
32d7feae958e: Pull complete
a8fd2466ac4c: Pull complete
c7bfa4fe9cd5: Pull complete
Digest: sha256:443a28765cdd2133c0e816ef8d9f25c4c1e32b79b5aa1b9d2002a2f815a122bd
Status: Downloaded newer image for jenkins/jenkins:latest
docker.io/jenkins/jenkins:latest
#创建挂载目录
[root@chenbin ~]# mkdir -p /var/jenkins_mount
[root@chenbin ~]# chmod 777 /var/jenkins_mount
#创建并启动容器
[root@chenbin ~]# docker run -d -p 10240:8080 -p 10241:50000 -v /var/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins jenkins/jenkins
3199aec11649f9fb9b5429df806ae290a9167c953da85211b6124ef00db1e155
#查看容器是否启动成功
[root@chenbin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3199aec11649 jenkins/jenkins "/sbin/tini -- /usr/…" 6 seconds ago Up 5 seconds 0.0.0.0:10240->8080/tcp, 0.0.0.0:10241->50000/tcp myjenkins
#配置镜像加速,进入 cd /var/jenkins_mount/ 目录。
[root@chenbin ~]# cd /var/jenkins_mount/
[root@chenbin jenkins_mount]# ls
config.xml identity.key.enc logs plugins secrets users
copy_reference_file.log jenkins.telemetry.Correlator.xml nodeMonitors.xml secret.key updates war
hudson.model.UpdateCenter.xml jobs nodes secret.key.not-so-secret userContent
#修改 vi hudson.model.UpdateCenter.xml里的内容
[root@chenbin jenkins_mount]# vi hudson.model.UpdateCenter.xml
#将 url 修改为 清华大学官方镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
通过http://cbbgs.cn:10240/访问
#得到管理员密码
[root@chenbin ~]# docker exec -it 3199aec11649 /bin/bash
jenkins@3199aec11649:/$ cat /var/jenkins_home/secrets/initialAdminPassword
507686fcc6f34e1799eb7f818f09ce63
具名挂载和匿名挂载
-
#匿名挂载 只指定容器内的路径,没有写容器外的路径 docker -d -P --name nginx01 -v /ect/nginx nginx #具名挂载 -v 卷名:容器内路径 docker run -d -P --name nginx01 -v juming:/ect/nginx nginx #所有docker容器内的卷,没有指定目录都是在 /var/lib/docker/volumes/xxx/_data #如何区分是具名挂载、匿名挂载还是指定路径挂载 -v 容器内路径 #匿名挂载 -v 卷名:容器内路径 #具名挂载 -v /宿主机路径:容器内路径 #指定路径挂载
初识DockerFile
DockerFile就是用来构建docker镜像的构建文件!命令脚本!
通过在这个脚本可以生成镜像,镜像是一层一层的,脚本也是一个一个的命令,每个命令都是一层。
#创建一个dockerfile文件,名字可以随意但是建议Dockerfile
docker build -f 文件路径 -t 镜像路径:1.0
数据卷容器
多个mysql同步!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSbcmgwJ-1626266216136)(docker.assets/7.png)]
#运行第一个mysql
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
#运行第二个mysql 通过--volumes-from 来实现容器数据卷
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql
#在这里mysql01就叫数据卷容器
数据一旦持久化 到本地,本地的数据就不会丢,它是拷贝的概念!
DockerFile
dockerfile 是用来构建docker镜像的文件,命令参数脚本!
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
Dockerfile构建过程
基础知识:
1、每个保留关键字都是大写
2、从上到下执行
3、#表示注释
4、每一个指令都会创建一个新的镜像层,并提交
Dockerfile是面向开发的,发布项目就制作成镜像,编写dockerfile文件。
Dockerfile:构建文件,定义了一切步骤,源代码
DockerImage:通过dockerfile构建生成的镜像,最终发布和运行的产品。
Docker容器:容器就是镜像运行起来提供服务器。
DockerFile指令
FROM #基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的 姓名+邮箱
RUN #构建镜像的时候需要运行的命令
ADD #步骤:tomcat镜像,这个tomat压缩包!添加内容
WORKDIR #镜像工作目录
VOLUME #挂载的目录
EXPOSE #指定暴露的端口配置
CMD #指定这个容器启动的时候要运行的指令,最后有个会生效,可被代替
ENTRPINT #指定这个容器启动的时候要运行的指令,命令可追加
ONBUILD #当构建被继承Dockerfile,这个时候运行ONBUILD指令的指令。触发指令。
COPY #类似于ADD,拷贝
ENV #构建的时候设置环境变量
构建自己的centos
DockerHUb中很多镜像都是从 FROM scratch 这个基础镜像开始的,然后配置我们需要的软件!
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20201113" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
CMD ["/bin/bash"]
开始
# 进入/home
cd /home
#创建文件夹
mkdir dockerfile
#进入dockerfile
cd dockerfile
#写配置文件
vim mydockerfile # i 开始插入
#FROM 来自centos
FROM centos
#制作者
MAINTAINER cbbgs<2629812077@qq.com>
#构建的时候设置环境变量
ENV MYPATH /usr/local
#镜像工作目录
WORKDIR $MYPATH
#构建镜像的时候需要运行的命令
RUN yum -y install vim
RUN yum -y install net-tools
#指定暴露的端口配置
EXPOSE 80
#指定这个容器启动的时候要运行的指令,最后有个会生效,可被代替
CMD echo $MYPATH
CMD echo "-----end-------"
CMD /bin/bashFROM centos
# ESC :wq保存退出
# 查看一下
cat mydockerfile
#构建dockerfile
# docker build -f 文件路径 -t 镜像名:版本号
docker build -f mydockerfile -t mycentos:0.1 . #别忽略这个点 .
#测试运行mydockerfile
#查看创建的镜像
docker images
docker run -it mycentos:0.1
Jdk镜像
#先下载centos镜像
docker pull centos
#下载linux的jdk,将下载好的jdk1.8的包从本地上传到/usr/local/src目录下进行解压
mkdir jdk
#解压上传的jdk
tar --zxvf FileName.tar.gz
#在/usr/local目录下创建jdk目录,把/home/jdk下的jdk-8u221-linux-x64.tar.gz复制到/usr/local/jdk目录下,然后创建Dockerfile
cd /usr/local/jdk
cp /home/jdk/jdk-8u221-linux-x64.tar.gz ./
#然后创建Dockerfile
vim Dockerfile
#Dockerfile的内容如下:
FROM centos
MAINTAINER cbbgs<2629812077@qq.com>
RUN mkdir /usr/local/jdk
WORKDIR /usr/local/jdk
ADD jdk-8u221-linux-x64.tar.gz /usr/local/jdk
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_221
ENV JRE_HOME /usr/local/jdk/jdk1.8.0_221/jre
ENV PATH $JAVA_HOME/bin:$PATH
#构建镜像
docker build -t myjdk1.8 .
#运行容器
docker run -d --name jdk1.801 myjdk1.8
#查看jdk安装
docker exec -it jdk1.801 /bin/bash
Tomcat镜像
1、准备jdk 和tomcat的压缩包
2、编写配置文件dockerfile 命名 Dockerfile,系统会找到就不用加-f
3、构建镜像
docker build -t diytomcat .
4、运行容器
docker run d -p 8080:8080 --name mytomcat diytomcat
发布镜像
发布到dockerHub
dockerHub的官方网站https://hub.docker.com/注册账号
在服务器上提交自己的镜像
docker login -u cbbgs
发布自己的镜像
# 查看自己的镜像
docker images
#发布镜像 docker push 镜像名
docker push cbbgs/mycentos:0.1
root@iZnn5svpfx2rfxZ:/home/dockerfile# docker push mycentos:0.1
The push refers to repository [docker.io/library/mycentos]
6b3fa90214ad: Preparing
d996225f731b: Preparing
2653d992f4ef: Preparing
denied: requested access to the resource is denied #拒绝
#解决办法 给镜像增加一个tag
docker tag 镜像ID cbbgs/mycentos:0.1
root@iZnn5svpfx2rfxZ:/home/dockerfile# docker tag ddbf3d1753f1 cbbgs/mycentos:0.1
root@iZnn5svpfx2rfxZ:/home/dockerfile# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cbbgs/mycentos 0.1 ddbf3d1753f1 35 minutes ago 291MB
mycentos 0.1 ddbf3d1753f1 35 minutes ago 291MB
mysql latest d4c3cafb11d5 2 days ago 545MB
centos latest 300e315adb2f 5 weeks ago 209MB
root@iZnn5svpfx2rfxZ:/home/dockerfile# docker push cbbgs/mycentos:0.1
The push refers to repository [docker.io/cbbgs/mycentos]
6b3fa90214ad: Pushed
d996225f731b: Pushed
2653d992f4ef: Pushed
Head https://registry-1.docker.io/v2/cbbgs/mycentos/blobs/sha256:ddbf3d1753f1a93893f9400364d102d59f10b0f5befbba91214ab001022e762b: net/http: TLS handshake timeout
发布到阿里云镜像
1、登录阿里云
2、找到容器镜像服务
3、创建一个命名空间
4、创建容器镜像
5、浏览阿里云信息
- 登录阿里云Docker Registry
$ sudo docker login --username=包谷工作室 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
- 从Registry中拉取镜像
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/cbbgs/centos:[镜像版本号]
- 将镜像推送到Registry
$ sudo docker login --username=包谷工作室 registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/cbbgs/centos:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/cbbgs/centos:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
- 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。
- 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEregistry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 “docker push” 命令将该镜像推送至远程。
$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
Docker网络
刚不动了,不行了!
微服务打包成Docker镜像
1、创建一个微服务项目–以homemall为例
2、在idea上下载插件Docker,创建一个Dockerfile文件(高亮)
3、书写Dockerfile的内容
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
4、将项目打成jar包,然后用xptf将生成的jar包和Dockerfile文件上传到.home/idea文件夹下
5、生成镜像
docker build -t homemall .
root@iZnn5svpfx2rfxZ:/home/idea# docker build -t homemall .
Sending build context to Docker daemon 40.54MB
Step 1/5 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
---> d23bdf5b1b1b
Step 2/5 : COPY *.jar /app.jar
---> 3fc2ad667803
Step 3/5 : CMD ["--server.port=8080"]
---> Running in 48ff9050e8bc
Removing intermediate container 48ff9050e8bc
---> ed73087d50e9
Step 4/5 : EXPOSE 8080
---> Running in 8d384f646c10
Removing intermediate container 8d384f646c10
---> d04c79a528ea
Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"]
---> Running in 4ddb04d4f27d
Removing intermediate container 4ddb04d4f27d
---> 26f44ae0aceb
Successfully built 26f44ae0aceb
Successfully tagged homemall:latest
6、运行镜像
docker run -d homemall
Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
Compose 是Docker官方的开源项目需要安装。
Dockerfile 让程序在任何地方运行 。
Compose
# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}