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                  
           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                  
           5 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["/entrypoint.…   0B                  
           5 months ago        /bin/sh -c #(nop) COPY file:507caa54f88c1f38…   155B                
           5 months ago        /bin/sh -c #(nop)  EXPOSE 5000                  0B                  
           5 months ago        /bin/sh -c #(nop)  VOLUME [/var/lib/registry]   0B                  
           5 months ago        /bin/sh -c #(nop) COPY file:4544cc1555469403…   295B                
           5 months ago        /bin/sh -c #(nop) COPY file:21256ff7df5369f7…   20.1MB              
           5 months ago        /bin/sh -c set -ex     && apk add --no-cache…   1.29MB              
           5 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                  
           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

你可能感兴趣的:(docker部署安装以及常用操作)