docker部署安装以及常用操作

Docker与Kvm的对比

kvm:

  1. 虚拟机

  2. 使用复杂

  3. 启动过程相对慢(分钟)

  4. 模版文件较大

  5. 和物理完全隔离

  6. 模拟的是一个完整系统,可以登录并实现管理

docker:

  1. 直接虚拟出来一个用户空间

  2. 使用简单

  3. 启动非常块(秒级)

  4. 模版文件很小

  5. 在一定程度上和物理机隔离

  6. 仅仅是模拟一部分用户空间,不方便管理

docker 底层技术

"namespaces" . "Union FS" . "Cgroup". "container format"

docker部署安装

第一步:需要下载阿里云较新版的docker源文件

[root@ken-node3 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第二步:移动文件到yum.repos.d下

[root@ken-node3 ~]# mv docker-ce.repo /etc/yum.repos.d/

第三步:下载docker-ce

docker-ce 社区免费版

docker-ee 企业收费版

[root@ken-node3 ~]# yum install docker-ce -y

第四步:直接启动docker并设置开机自启

[root@ken-node3 ~]# systemctl restart docker
[root@ken-node3 ~]# systemctl enable docker

注:

如果不启动docker服务会报如下的错误:

[root@ken-node3 ~]# docker image ls
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

第五步:验证docker服务是否可以正常运行

[root@ken1 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE

镜像加速

为什么镜像加速?

因为docker在拉取镜像的时候是默认使用dockerhub上面的镜像即国外镜像,所以拉取速度是很慢的,

为了解决这个问题,我们就可以使用阿里云镜像加速

阿里云镜像加速

第一步:浏览器输入阿里云进入官网并登陆

第二步:进入控制台–》产品与服务–》容器镜像服务–》镜像加速器

第三步:创建一个脚本写入如下内容

一键部署安装docker并加速

#!/bin/bash
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mv docker-ce.repo /etc/yum.repos.d
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker镜像操作相关的指令

docker使用技巧:

[root@ken-node3 ~]# docker –help #可以查看docker所有使用方法

[root@ken-node3 ~]# docker image –help #可以查看docker镜像操作的所有方法

[root@ken-node3 ~]# docker image ls –help #可以查看docker镜像操作中ls指令的用法

镜像操作指令:

build 从dockerfile中创建镜像

history 可以显示镜像的构建历史 #docker镜像分层构建,每一层都有一个指令

import 从一个压缩包创建镜像

save 创建镜像压缩包

load 从压缩包导入镜像

ls 列出来镜像

prune 清除不使用的镜像

pull 拉取镜像

push 推送镜像

rm 删除镜像

tag 改名

docker镜像操作演示

例子1:拉取镜像

格式:docker image pull REPOSITORY:TAG

[root@ken1 ~]# docker image pull busybox

注意:

如果在拉取镜像的时候只指定了REPOSITORY的话,默认拉取的是tag为latest的版本

例子2:查看当前有哪些镜像

[root@ken1 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB

例子3:查看镜像构建历史

[root@ken1 ~]# docker image history busybox
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
db8ee88ad75f        3 weeks ago         /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
<missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:9ceca008111a4ddff…   1.22MB   

例子4:制作镜像压缩包

方法一:使用-o选项,output

[root@ken1 ~]# docker image save busybox:1.31.0 -o busybox1.31.tar
[root@ken1 ~]# ls
anaconda-ks.cfg  busybox1.31.tar  docker-speend.sh  test  test1

方法二:使用标准输出

[root@ken1 ~]# docker image save busybox:1.31.0 > busybox1.31-v2.tar
[root@ken1 ~]# ls
anaconda-ks.cfg  busybox1.31.tar  busybox1.31-v2.tar  docker-speend.sh  test  test1

例子5:使用镜像压缩包

方法一:使用-i,input

[root@ken-node3 ~]# docker image load -i busybox1.31.tar
Loaded image: busybox:1.31.0
[root@ken-node3 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB

方法二:

[root@ken-node3 ~]# docker image load <  busybox1.31.tar
Loaded image: busybox:1.31.0
[root@ken-node3 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB

例子6:删除镜像

方法一:

[root@ken1 ~]# docker image rm busybox:1.31.0
Untagged: busybox:1.31.0
[root@ken1 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB

方法二:

[root@ken1 ~]# docker rmi busybox

例子7:镜像改名

[root@ken1 ~]# docker image tag busybox:1.31.0 busybox:latest
[root@ken1 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             1.31.0              db8ee88ad75f        3 weeks ago         1.22MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB

例子8:清除不经常使用的镜像

[root@ken1 ~]# docker image prune -f
Total reclaimed space: 0B

docker容器操作详解

run 运行容器

commit 使用当前运行的容器制作镜像

exec 可以在容器中执行命令或者进入容器

inspect 查看容器的详细信息,也可以查看镜像的信息

kill 强制杀掉容器

logs 查看容器产生的日志信息

ls 查看当前运行的容器

ps 查看当前运行的容器

pause 暂停容器

unpause 开启容器

port 查 看容器端口映射信息

rename 对容器改名

restart 重启容器

start 启动容器

stop 停掉容器

rm 删除容器,默认删除不了正在运行的容器,-f

stats 查看容器的运行状态

top 查看容器的系统内存,磁盘使用信息

例子1:启动容器

前台运行容器

[root@ken1 ~]# docker run -i -t busybox /bin/sh

-i 交互模式

-t分配终端

后台运行容器

[root@ken1 ~]# docker run -d nginx-game:v1

-d后台运行

例子2:查看正在运行的容器

[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
95a695cffb03        nginx-game:v1       "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:88->80/tcp   hardcore_shannon

查看正在运行以及已经退出的容器

[root@ken1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES
95a695cffb03        nginx-game:v1       "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes               0.0.0.0:88->80/tcp   hardcore_shannon
40799b6b38f2        busybox             "/bin/sh"                7 minutes ago       Exited (0) 6 minutes ago                        infallible_benz
ac864729390b        busybox             "/bin/bash"              7 minutes ago       Created                                         elastic_swartz
adbc635a8bf1        busybox             "ip a"                   8 minutes ago       Exited (0) 8 minutes ago                        nervous_noyce

例子3:删除一个容器

方法一:长ID

[root@ken1 ~]# docker rm 9105c43602d9
9105c43602d9

方法二:短ID

[root@ken1 ~]# docker rm 2c85ff7
2c85ff7

方法三:容器名

[root@ken1 ~]# docker rm youthful_kowalevski
youthful_kowalevski

注意:删除镜像一样!

例子4:后台运行容器

[root@ken1 ~]# docker run -d nginx-game:v1
72f712bff84eff8ad0b371291ff488d21f25aca69c2f08a1fd52dd2718d2158c
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        80/tcp              laughing_lovelace

例子5:运行容器加多个参数

[root@ken1 ~]# docker run --name nginxtest -d --rm nginx-game:v1
2cdec372f4350dea46b9fc6ce37d14314a4ef1351f2ec10da662aa36919b6bbe
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2cdec372f435        nginx-game:v1       "nginx -g 'daemon of…"   3 seconds ago       Up 2 seconds        80/tcp              nginxtest

–name 指定容器名字

-d 后台运行

–rm 容器停掉之后自动删除

例子6:批量删除容器

[root@ken1 ~]# docker rm  $(docker ps -aq)
95a695cffb03
40799b6b38f2
ac864729390b
adbc635a8bf1

注意:

这样只能删除已经退出的容器,无法删除正在运行的容器

如果也想要删掉正在运行的容器,可以在docker rm 后加-f选项进行强制删除

例子7:查看容器信息

[root@ken1 ~]# docker inspect 72f712bff84e

注:

查看容器暴露的端口:

方法一:

docker history IMAGE_ID

方法二:

查看容器详细信息 docker inspect CONTAINER_ID

例子8:查看容器运行状态

[root@ken1 ~]# docker stats 72f712bff84e
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
72f712bff84e        laughing_lovelace   0.00%               1.344MiB / 1.779GiB   0.07%               648B / 0B           0B / 0B             2

例子9:对容器内存使用量进行限制

[root@ken1 ~]# docker run -d -m 64M nginx-game:v1
-m选项指定容器可以使用的内存量

例子10:停止容器

[root@ken1 ~]# docker stop 8cd65493c7c1 
8cd65493c7c1
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       80/tcp              laughing_lovelace

例子11:启动容器

[root@ken1 ~]# docker start 8cd65493c7c1
8cd65493c7c1
[root@ken1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   2 minutes ago       Up 1 second         80/tcp              loving_sammet
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       80/tcp              laughing_lovelace

例子12:杀掉容器

[root@ken1 ~]# docker kill 8cd65493c7c1
8cd65493c7c1
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes       80/tcp              laughing_lovelace
[root@ken1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   2 minutes ago       Exited (137) 6 seconds ago                       loving_sammet
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes                80/tcp              laughing_lovelace

docker容器操作的kill和stop区别:

stop优雅退出。-15 10秒之后-9

kill -9

例子13:查看容器日志

[root@ken1 ~]# docker logs 8cd65493c7c1

持续刷新检测日志:

[root@ken1 ~]# docker logs 8cd65493c7c1 -f

-f 持续刷新

例子14:容器改名

[root@ken1 ~]# docker rename loving_sammet nginx-game

例子14:查看容器系统使用信息

[root@ken1 ~]# docker top nginx-game
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3054                3036                0                   18:04               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 3088                3054                0                   18:04               ?                   00:00:00            nginx: worker process

例子15:暂停容器

[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   12 minutes ago      Up 9 minutes (Paused)   80/tcp              nginx-game

例子16:再开启容器

[root@ken1 ~]# docker unpause nginx-game
nginx-game
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   13 minutes ago      Up 9 minutes        80/tcp              nginx-game

例子17:查看容器端口映射信息

[root@ken1 ~]# docker port 8cd65493c7c1 

例子18:进入容器

[root@ken1 ~]# docker exec -it 8cd65493c7c1  sh
# 
# 
# 
# exit
[root@ken1 ~]# docker exec -it 8cd65493c7c1  bash
root@8cd65493c7c1:/# 
root@8cd65493c7c1:/# 
root@8cd65493c7c1:/# 

可以选择使用sh和bash进入容器

例子19:在容器外执行命令

[root@ken1 ~]# docker exec -it 95a695cffb03 ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

注意:

如果你要想操作容器的话,必须保证容器时up状态即正在运行的状态,exited状态的容器时无法进行操作的。

总结:进入容器的方式:4种进入容器的方法

方法一:exec #在容器里面退出,容器本身不会退出

方法二:attach #容器本身退出 exitd

方法三:ssh

方法四:nsenter

端口映射

实现了外部环境访问容器内部

四类端口映射:

第一类:把容器的端口随机映射为物理机的一个端口
第二类:把容器的端口映射为物理机特定的一个端口
第三类:把容器的端口映射为物理机特定网卡上的特定端口
第四类:把容器的端口映射为物理机特定网卡上的随机端口

第一类:把容器的端口随机映射为物理机的一个端口

使用的是大写的-P

[root@ken1 ~]# docker run -d -P httpd   #随机映射为物理机的端口
cd662b604a59f6715b28c1af62956dbf665d5c4916897fbeb844e0e77ba8b99e
[root@ken1 ~]# docker ps    #可以查看到容器映射信息
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
cd662b604a59        httpd               "httpd-foreground"       12 seconds ago      Up 11 seconds       0.0.0.0:32768->80/tcp   happy_cray
50405dd6b651        httpd               "httpd-foreground"       6 minutes ago       Up 6 minutes        80/tcp                  busy_ardinghelli
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   About an hour ago   Up About an hour    80/tcp                  laughing_lovelace
[root@ken1 ~]# ss -tnl   #物理机启动会了相应的端口
State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN      0      128                               *:22                                            *:*                  
LISTEN      0      100                       127.0.0.1:25                                            *:*                  
LISTEN      0      128                              :::32768                                        :::*                  
LISTEN      0      128                              :::22                                           :::*                  
LISTEN      0      100                             ::1:25                                           :::*              

或者

[root@ken1 ~]# docker port cd662b604a59
80/tcp -> 0.0.0.0:32768

注意:

使用-P选线。是把容器内所有expose的端口都映射为物理机的随机端口

第二类:把容器端口映射为物理机特点端口

使用的是小写的-p

[root@ken1 ~]# docker run -d -p 80:80  httpd  #使用小写p进行特定端口映射
15a01c693f4c4ffc0774bcb535fc5ec415aec9944f295ae9d468915b35019fae
[root@ken1 ~]# docker port 15a01c693f4c
80/tcp -> 0.0.0.0:80
[root@ken1 ~]# ss -tnl
State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN      0      128                               *:22                                            *:*                  
LISTEN      0      100                       127.0.0.1:25                                            *:*                  
LISTEN      0      128                              :::32768                                        :::*                  
LISTEN      0      128                              :::80                                           :::*                  
LISTEN      0      128                              :::22                                           :::*                  
LISTEN      0      100                             ::1:25                                           :::*        

– p 80:80 第一个80是 物理机端口,第二个80是容器端口,顺序不能乱!另外物理机的端口不能被占用!

第三类:把容器端口映射为特点网卡上的随机端口

使用小写的p

[root@ken1 ~]# docker run -d -p 192.168.163.151::80 httpd
ba79a389a467f56c31a0f8489c39a35c756d56bd6a53486d4bee68b3103589bf
[root@ken1 ~]# docker port ba79a389a467f56c31a0f
80/tcp -> 192.168.163.151:32769

-p 192.168.163.151::80把容器的80端口随机映射为192.168.163.151上的一个随机端口

第四类:把容器端口映射为特点网卡上的特点端口

[root@ken1 ~]# docker run -d -p 192.168.163.151:81:80 httpd
64ce1f926979f66992a0377fabef5859b45d9466854649b457d741e3020257d6
[root@ken1 ~]# docker port 64ce1f926979f66
80/tcp -> 192.168.163.151:81
[root@ken1 ~]# ss -tnl
State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN      0      128                 192.168.163.151:32769                                         *:*                  
LISTEN      0      128                 192.168.163.151:81                                            *:*       

-p 192.168.163.151:81:80 把容器80端口映射为192.168.163.151上的81端口

总结;

1.在端口映射中使用到了两个选项一个是大写的P,表示把容器暴露的端口随机映射为物理机上的一个随机端口,不能指定特定网卡
2.另外一个是小写的p,可以把容器暴露的端口映射为物理机特定的端口
3.或者映射为物理机特定网卡上的随机端口
4.或者特定网卡上的特定端口

阿里云镜像仓库

1,阿里云镜像仓库
2.dockerhub
3.registory私有镜像仓库

使用阿里云镜像仓库

第一步:注册登录

第二步:创建镜像仓库

第三步:命令行登录阿里云

[root@ken1 ~]# docker login --username=kenkendyg registry.cn-hangzhou.aliyuncs.com
Password:    #是你注册的阿里云账号密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

第四步:改名

[root@ken1 ~]# docker tag nginx-com:v1 registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
[root@ken1 ~]# docker image ls
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
nginx-com                                            v1                  5de6e803346c        11 minutes ago      178MB
registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com   v1                  5de6e803346c        11 minutes ago      178MB

第五步:推送

[root@ken1 ~]# docker push registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1

第六步:查看

阿里云镜像版本

第七步:拉取

[root@ken-node3 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1

可以进行改名操作

第一步:首先查看相关镜像

[root@ken-node3 ~]# docker image ls
REPOSITORY                                           TAG                 IMAGE ID            CREATED                  SIZE
nginx-com                                            v1                  5de6e803346c        Less than a second ago   178MB
registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com   v1                  5de6e803346c        Less than a second ago   178MB

第二步:改名

[root@ken-node3 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1 nginx-com:v1

第三步:删除相关镜像

[root@ken-node3 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1

镜像分类:

1,工具类的镜像(容器)

2,服务类的镜像(容器)

工具类镜像比如busybox,centos启动工具类镜像是使用交互模式docker run -it

服务类镜像比如nginx,redis,httpd启动服务类镜像使用的是docker -d

docker仓库

1.阿里云仓库

2.dockerhub仓库

3.私有仓库registry

1.dockerhub需要依赖外网网络,registry无需外网网络

2.dockerhub是公共仓库,任何人都可以进行拉取,registry私有仓库免费而且安全

搭建docker私有仓库registry

小心 latest tag
千万别被 latest tag 给误导了。latest 其实并没有什么特殊的含义。当没指明镜像 tag 时,Docker 会使用默认值 latest,仅此而已。

虽然 Docker Hub 上很多 repository 将 latest 作为最新稳定版本的别名,但这只是一种约定,而不是强制规定。

所以我们在使用镜像时最好还是避免使用 latest,明确指定某个 tag,比如 httpd:2.3,ubuntu:xenial。

第一步:拉取registry镜像

[root@ken1 ~]# docker search registry
[root@ken1 ~]# docker pull registry

第二步:查看registry镜像信息

[root@ken1 ~]# docker history registry
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
f32a97de94e1        5 months ago        /bin/sh -c #(nop)  CMD ["/etc/docker/registr…   0B                  
<missing>           5 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["/entrypoint.…   0B                  
<missing>           5 months ago        /bin/sh -c #(nop) COPY file:507caa54f88c1f38…   155B                
<missing>           5 months ago        /bin/sh -c #(nop)  EXPOSE 5000                  0B                  
<missing>           5 months ago        /bin/sh -c #(nop)  VOLUME [/var/lib/registry]   0B                  
<missing>           5 months ago        /bin/sh -c #(nop) COPY file:4544cc1555469403…   295B                
<missing>           5 months ago        /bin/sh -c #(nop) COPY file:21256ff7df5369f7…   20.1MB              
<missing>           5 months ago        /bin/sh -c set -ex     && apk add --no-cache…   1.29MB              
<missing>           5 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                  
<missing>           5 months ago        /bin/sh -c #(nop) ADD file:38bc6b51693b13d84…   4.41MB 

搭建私有仓库需要和保存镜像的数据卷绑定

registry监听的是5000端口
打开registry容器

[root@ken1 ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2

第三步:使用registry

[root@ken1 ~]# docker tag busybox 192.168.64.8:5000/busbox:v1
[root@ken1 ~]# docker push 192.168.64.8:5000/busbox:v1
The push refers to repository [192.168.64.8:5000/busbox]
Get https://192.168.64.8:5000/v2/: http: server gave HTTP response to HTTPS client

想要使用registry私有仓库,需要首先把镜像名改为host:port/镜像名:tag

但是现在直接推得话会报上面的错误

第四步:解决上述错误

在docker文件添如下一行

[root@ken1 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.64.8:5000"]
}

ip地址指定的是registry所在的宿主机的IP地址

5000端口是registry仓库映射到宿主机的端口,建议就映射为特定的5000端口

第五步:重启docker和容器

[root@ken1 ~]# systemctl restart docker
[root@ken1 ~]# docker start d8681dfb9854 

第六步:再次推送

[root@ken1 ~]# docker push 192.168.64.8:5000/busbox:v1

第七步:查看仓库

[root@ken1 ~]# ls /test/docker/registry/v2/repositories/busbox/

其他人如何使用私有仓库?

第一步:也需要添加一行

"insecure-registries":["192.168.64.8:5000"]

第二步:重启docker

第三步:拉取镜像

[root@ken1 ~]# docker pull 192.168.64.8:5000/busbox:v1

总结如何实现共享镜像?

1.把镜像制作成tar包,然后进行镜像共享
2.把镜像传到阿里云或者dockerhub仓库进行镜像共享harbor
3.把镜像传到公司内部私有镜像仓库,实现镜像共享

docker使用数据库实现数据持久化演示

第一步:搜索数据库镜像并下载相应的数据库镜像

[root@localhost ~]# docker search mysql

第二步:启动数据库

[root@localhost ~]# docker run -d -v /ken:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 --name mysql1 mysql

-e 指定设置环境变量。MYSQL_ROOT_PASSWORD指定数据库登录的初始密码

第三步:访问数据库

[root@localhost ~]# docker run -it mysql mysql -uroot -p123 -h172.17.0.2
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.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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> create database ken;
Query OK, 1 row affected (0.22 sec)

第四步:销毁容器并验证数据持久化

[root@localhost ~]# docker run -d -v /ken:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql
d9655ecf33e7b8f11fb231e9b0a398f61d48268c084ef184e110fced55491364
[root@localhost ~]# docker exec -it d9655ecf33e7b8f11fb23 bash
root@d9655ecf33e7:/# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
root@d9655ecf33e7:/# mysql -uroot -p123
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 9
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ken                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql> 

两个容器之间建立连接

[root@localhost ~]# docker run -it --link flamboyant_gauss:mysql mysql mysql -uroot -p123 -hmysql
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 10
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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> 
--link flamboyant_gauss:mysql

格式:容器名:别名

本文转载自:http://www.kendd.cn/?p=554

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342