确认docker hub申威镜像仓库
仓库地址:Docker Hub
补充:若想使用docker hub仓库,确认宿主机可以上外网。
确认本机docker环境
说明:中标麒麟服务器操作系统可提供docker18.06.3.ce和docker 17.06.2两个版本,根据所需安装好docker后,这里我们以docker18.06.3 ce版为例,通过如下命令查看docker版本,确认docker安装成功,命令如下:
[root@host157~]# docker -v
Docker version 18.06.3-ce, build d7080c17a580919f5340a15a8e5e013133089680
确认docker环境安装成功后,执行如下命令,启动docker服务:
[root@host157~]# systemctl start docker
设置docker服务为开机启动,执行如下命令:
[root@host157~]#systemctl enable docker
下载base镜像
- 方式一:使用docker hub上的base镜像
[root@host157~]docker pull leechm/neokylin-sw:v10-min
2. 方式二:本地导入
厂商提供镜像包xxx.tar,得到镜像的压缩包xxx.tar
[root@host157~]docker load -i xxx.tar
3. 查看本机镜像
[root@host157~]# docker images | grep neokylin
REPOSITORY TAG IMAGE ID CREATED SIZE
leechm/neokylin-sw v10-min 23a6bfcc5831 7 weeks ago 485MB
注意:通过docker info命令查看Docker Root Dir,可以看到docker镜像存储的目录,默认为/var/lib/docker
制作服务镜像
这里我们以一个nginx服务为例
进入容器里面制作
[root@host157 ~]# docker run -it leechm/neokylin-sw:v10-min bash
[root@60097923e6b3 /]# yum install openssh nginx -y
[root@60097923e6b3 /]# cat nginx_start.sh
#!/bin/bash
/usr/sbin/sshd -D &
/usr/sbin/nginx -g 'daemon off;'
[root@60097923e6b3 /]# chmod +x nginx_start.sh
[root@60097923e6b3 /]# bash nginx_start.sh
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 2048 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size
另开终端测试nginx服务,截图步骤分别为:
docker ps得到容器ID,通过容器ID得到容器ip,访问ip即可访问nginx服务
(1)打包nginx镜像
上面测试成功之后,通过容器ID打包nginx容器为nginx镜像。
[root@host157 ~]# docker commit 60097923e6b3 nginx:v1.0
sha256:1936bfd28b4c3a2df3bffd9db73c49ce0f4cda36ebb4e292a901745d2aefce95
[root@host157 ~]# docker images |grep nginx
nginx v1.0 1936bfd28b4c 8 seconds ago 542MB
注意:不建议通过commit生成镜像,这样就会产生父子镜像,若想删除镜像,得先删除子镜像,然后才能删除父镜像。
(2)运行nginx镜像
[root@host157 ~]# docker run -d -p 8080:80 nginx:v1.0 /nginx_start.sh
9d0f1f9ad6f0a6d609651b086e312eac7ce25cc3d1fa88fcd38bbf2335101254
[root@host157 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d0f1f9ad6f0 nginx:v1.0 "/nginx_start.sh" 3 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp lucid_euler
通过浏览器访问nginx服务,测试8080端口
通过dockerfile
Dockerfile详细指令教程参考:Docker Dockerfile | 菜鸟教程
[root@host157 dockerfile]# ls
Dockerfile nginx_start.sh
[root@host157 dockerfile]# cat Dockerfile
FROM leechm/neokylin-sw:v10-min
RUN yum install openssh nginx -y
COPY nginx_start.sh /
CMD ["/nginx_start.sh"]
[root@host157 dockerfile]#
[root@host157 dockerfile]# docker build -t nginx:v2.0 .
[root@host157 dockerfile]# docker run -d -p 8081:80 nginx:v2.0
33c2cf57ce543afa77d01eb038829429dfa384467119695129597b2903823a5a
[root@host157 dockerfile]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33c2cf57ce54 nginx:v2.0 "/nginx_start.sh" 5 seconds ago Up 3 seconds 0.0.0.0:8081->80/tcp dreamy_northcutt
9d0f1f9ad6f0 nginx:v1.0 "/nginx_start.sh" 11 minutes ago Up 11 minutes 0.0.0.0:8080->80/tcp lucid_euler
测试8081端口
容器里面访问本地仓库
本地仓库如何搭建,简单说明一下
所有的包下载到本地的一个目录下,然后使用createrepo_c命令即可
这里同样以nginx为例,具体看如下图
通过启动容器挂载宿主机仓库目录到容器里面实现仓库数据共享
[root@host157 ~]# docker run -it -v /root/repo:/root/repo leechm/neokylin-sw:v10-min bash
修改repo地址
[root@1143eb63b30f /]# cat /etc/yum.repos.d/neokylin.repo
[SWKY10-local]
name=SWKY10-3-local
baseurl=file:///root/repo
enabled=1
priority=1
gpgcheck=0
skip_if_unavailable = 1
keepcache = 0
[root@1143eb63b30f /]#yum install nginx