docker初探

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、登录 阿里云选择镜像与服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmlRtoj6-1626266216128)(docker.assets/image-20210513130411685.png)]

2、设置登录密码

3、选择镜像加速器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qq8YRBuf-1626266216130)(docker.assets/2.png)]

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

具名挂载和匿名挂载

  1. #匿名挂载  只指定容器内的路径,没有写容器外的路径
    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、浏览阿里云信息

  1. 登录阿里云Docker Registry
$ sudo docker login --username=包谷工作室 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

  1. 从Registry中拉取镜像
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/cbbgs/centos:[镜像版本号]
  1. 将镜像推送到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]和[镜像版本号]参数。

  1. 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

  1. 示例

使用"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: {}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈斌-cb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值