1、安装
1.1 安装前准备
关闭防火墙并禁止开机自启
systemctl stop firewalld.service
systemctl disable firewalld
关闭selinux,若不关闭会影响容器查看映射的宿主机文件的权限
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
1.2. 安装docker
#安装前对/var/lib/docker 目录做好单独分区挂载或软连接到空间较大的磁盘路径
mkdir /home/var/lib/docker
ln -s /home/var/lib/docker /var/lib/docker
yum -y install docker
查看版本
docker -v
设置docker开机自启
systemctl enable docker
启动docker服务
systemctl start docker
应用配置
systemctl daemon-reload
重启docker
systemctl restart docker
1.3. 安装rancher
docker run -d --restart=always -p 8080:8080 rancher/server
注:如果一直报错,那么可能是网络原因,多试几次,如果还是不行,那就使用国内镜像下载地址,使用方式如下:
1)编辑/etc/docker/daemon.json文件
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
2)重启docker
systemctl restart docker
docker run -d --restart=always -p 8080:8080 rancher/server
#查看rancher docker ps netstat -tpnl | grep 8080
1.4. 访问
访问地址:http://xxxx:8080
2、使用
2.1、权限
启用访问控制-本地身份认证
创建的第一个账号默认是管理员账号,可以管理任何“环境”
2.2、环境
所有主机和Rahcner资源, 比如容器, 基础设施服务等, 都在环境中被创建, 并且属于一个环境
2.3、docker常用指令
2.3.1、查看版本信息
docker version
docker -v
2.3.2、查看镜像
docker image ls
docker images
2.3.3、删除镜像,目标镜像id(删除前,务必确保对应的容器是关闭删除状态)
docker rmi imageId
2.3.4、查看悬虚镜像(无标签的镜像-重复打包同一个镜像产生的)
docker image ls --filter dangling=true
2.3.5、移除悬虚镜像
docker image prune
2.3.6、查看容器
docker container ls
docker ps -a
docker image ls --filter=reference="*:latest"
docker image ls --format "{{.Size}}"
docker image ls --format "{{.Repository}}: {{.Tag}}: {{.Size}}"
2.3.7、查看实际运行时应用程序大小
docker exec -it 镜像名 /bin/ls -lh
2.3.8、查看日志
docker logs -f -t --tail 行数 容器名
docker logs -f -t --tail 10 s12
docker inspect s12
2.3.9、启动容器并开启交互,并切换到容器shell环境
docker container run -it ubuntu:latest /bin/bash
2.3.10、进入容器
docker exec -it ubuntu:latest /bin/bash
docker exec -it 容器id /bin/bash
2.3.11、退出容器shell环境:
Ctrl+PQ 组合键
exit
2.3.12、映射宿主机端口启动容器
#docker run -d 后台执行 -p 主机暴露端口:容器端口 --name container名称(自定义) 镜像名称:标签版本号
docker run -d -p 8081:8080 --name tomcat7 tomcat7.0.100:v1.0.0
#-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
docker run -d -p 8081:8080 -v /home/web:/docker_home/local/tomcat7/webapps --name tomcat7 tomcat7.0.100:v1.0.0
2.3.13、关闭容器
docker container stop ubuntu
docker container rm ubuntu
2.3.14、使用Dockerfile创建镜像
docker build -t qinxue/nginx-t .
指定Dockerfile文件:dockerfile-alpine-jdk8
docker build -f dockerFile-alpine-jdk8 -t skyblue/alpine-jdk8:1.0.0 .
2.3.15、拉取镜像,格式:docker image pull :
#若无tag,则默认会拉取latest标签(这里都是从官方仓库拉取的)
docker image pull ubuntu:latest
docker image pull alpine:latest
docker image pull mongo:3.3.11
docker image pull dockerHub账号/该账号下仓库名:标签
例如,docker image pull lut/redis:v3.2
2.3.16、根据容器ID创建新的镜像,同一个镜像修改后重启容器可以使用这种方式,就不用删除原来的容器
docker commit 容器id mytomcat:v1.0.1
2.3.17、登录到私有harbor
#配置daemon.json
[root@localhost 2.11.1]# vi /etc/docker/daemon.json {
"registry-mirrors": [ "https://20v9zh9c.mirror.aliyuncs.com", "https://dockerhub.azk8s.cn", "https://registry.docker-cn.com" ], "insecure-registries": [ "https://xxxxx" ] }
docker login ip:port -u xxxx -p xxxx
docker login xxxxx:7655 -u xxx -p xxx
2.4、镜像使用操作
#先在本地标记镜像
docker tag f829bd956198 xxxxxxxxxxxxxx/test_lab/api
docker tag api:Release.1.1.1.1 xxxxxxxxxx/test_lab/api:Release.1.1.1.1
#推送到仓库
docker push xxxxxxxxxx/test_lab/api:Release.1.1.1.1
docker import -m "use alpine-minirootfs-3.13.4-x86_64.tar.gz" alpine-minirootfs-3.13.4-x86_64.tar.gz alpine-3.13.4-base-image:1.0
docker save -o api-v1.1.1.1.Release.tar.gz xxxxxxxxxx/test_lab/api:1.1.1.1.Release
#或
docker export xxxxxxxxxx/test_lab/api:1.1.1.1.Release -o xxxxxxxxxx/test_lab/api:1.1.1.1.Release.tar.gz
docker stop xxx
docker rmi xxx
docker import xxxxxxxxxx/test_lab/api:1.1.1.1.Release.tar.gz xxxxxxxxxx/test_lab/api:1.1.1.1.Release
#1、镜像导出:docker save autotomcat -o autotomcat.tar
#2、镜像还原:
docker rmi autotomcat
docker load -i autotomcat.tar
#离线包导出:
#1.找一台安装了docker的服务器登录
docker login xxxxxx -u xxx -p xxx
#2.输入账号密码登录
#3.拉镜像 docker pull 镜像名称 #下载镜像,如果镜像名称是docker开头的 请改为harbor
docker pull xxxxxxxxxx/test_lab/api:1.1.1.1.Release
#4.打包镜像 docker save -o 文件名 镜像名称 #导出镜像 注意文件名不要包含:符号
docker save -o api-v1.1.1.1.Release.tar.gz xxxxxxxxxx/test_lab/api:1.1.1.1.Release
#或者
docker export xxxxxxxxxx/test_lab/api:1.1.1.1.Release -o api-v1.1.1.1.Release.tar.gz
#5.把文件从服务器下载下来即可即可
3、基础镜像构建
#Dockerfile:
FROM scratch
ADD alpine-minirootfs-3.13.4-x86_64.tar.gz /
CMD ["/bin/sh"]
#执行构建:
docker build -t alpine-3.13.4:v1.0.0 .
4、jdk8镜像构建
dockfile文件内容:
#dockerFile-alpine-jdk8:
FROM alpine:3.13.4
MAINTAINER cloudWind
MAINTAINER cloudWind "wel@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /lt_docker/jdk
#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u281-linux-x64.tar.gz /lt_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.32-r0.apk /lt_docker/jdk/
COPY glibc-bin-2.32-r0.apk /lt_docker/jdk/
COPY glibc-i18n-2.32-r0.apk /lt_docker/jdk/
#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main > /etc/apk/repositories && \
echo http://mirrors.aliyun.com/alpine/v3.10/community >> /etc/apk/repositories && \
RUN apk update && apk upgrade
#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh: wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖,这里glibc-2.32-r0.apk先安装后,再处理下软连接的问题,否则后面执行的时候会报错
## 如:/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
RUN apk --no-cache add ca-certificates wget \
&& wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
&& apk add glibc-2.32-r0.apk \
&& mv /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /usr/glibc-compat/lib/ld-linux-x86-64.so \
&& ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so /usr/glibc-compat/lib/ld-linux-x86-64.so.2 \
&& apk add glibc-bin-2.32-r0.apk glibc-i18n-2.32-r0.apk \
&& rm -rf /var/cache/apk/* glibc-2.32-r0.apk glibc-bin-2.32-r0.apk glibc-i18n-2.32-r0.apk
#7.配置环境变量
ENV JAVA_HOME=/lt_docker/jdk/jdk1.8.0_281
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
CMD ["java","-version"]
#删除setuid、setgid权限
RUN find / -perm /6000 -type f -exec chmod a-s {} \;|| true
#执行构建:
docker build -f dockerFile-alpine-jdk8 -t alpine-jdk8:v1.0.0 .
5、tomcat镜像构建
#Dockerfile:
#指定本地创建的基础镜像
FROM alpine-jdk1.8_281:v1.1.0
#创建目录
RUN mkdir -p /usr/local
#把当前目录下的jdk文件夹添加到镜像
ADD apache-tomcat-7.0.100 /usr/local/tomcat7
ENV CATALINA_HOME /usr/local/tomcat7
ENV PATH $PATH:$CATALINA_HOME/bin
#暴露8080端口
EXPOSE 8080
#启动时运行tomcat
CMD ["/usr/local/tomcat7/bin/catalina.sh","run"]
#执行构建:
docker build -t tomcat7.0.100:v1.0.0 .
#启动:
docker run -d -p 8081:8080 -v /home/web:/usr/local/tomcat7/webapps --name tomcat7 tomcat7.0.100:v1.0.0