0


docker、dockerfile从0->1(亲身体验)

1、卸载已有的docker(如果已下载需重新安装)

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2、下载安装docker(CentOS 7)

2.1、合适的话先查看内核

#查看服务器系统版本以及内核版本
cat /etc/redhat-release

#查看服务器内核版本
uname -r

结果(我的是CentOS 7)

2.2、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

2.3、 设置阿里云镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.4、安装Docker

yum install -y docker-ce

2.5、关闭防火墙

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
#查看是否关闭防火墙
systemctl status firewalld

2.5、开机启动

#启动docker命令
systemctl start docker
#设置开机自启命令
systemctl enable docker
#查看docker版本命令
docker version

安装完成结果

2.6、设置网段和阿里云镜像

2.6.1、阿里云中拿取自己的加速地址

进入阿里云官网

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

#设置网段 和 加速器
vim /etc/docker/daemon.json 
{
"registry-mirrors" : ["填自己在阿里云的加速"],
 "bip": "192.168.8.143(修改成自己的网段)/24",
 "exec-opts":["native.cgroupdriver=systemd"]
}

重新启动加载配置文件

systemctl daemon-reload
systemctl restart docker

3、docker命令

3.1、基础命令

docker search --镜像名    搜索仓库镜像

docker pull --镜像名    拉取镜像

docker ps     查看目前正在运行的所有容器 (-a 显示包括已经停止的容器)

docker rmi image_id/image_name    删除镜像

docker build    使用Dockerfile创建镜像

docker run    运行容器

docker exec    进入容器中执行命令 (例如:docker exec -it  container_id/container_name /bin/bash)

docker logs  container_id/container_name   查看容器日志(例如:docker logs -f -t --tail 10 container_id )

docker start  container_id/container_name    启动容器

docker restart  container_id/container_name    重启容器

docker stop container_id/container_name    停止容器

docker rm container_id/container_name    删除容器(只能删除已停止的容器)

4、dockerfile

4.1、dockerfile编写

用下方例子展示不同的功能使用命令FROM、RUN、ENV、COPY、EXPOSE、CMD

值得注意的是:RUN可以在文件中多条执行使用、但是CMD只有一条会执行。不想写多条RUN可以参考下方编写XShell脚本文件

在不同的环境下编码集和时间可能是不同的,尽量每一次进行容器设置。(本人在编码集生成签名时错过问题,所以特指这一条,有一些容器会默认使用POSIX)可以使用下方命令查看

查看当前环境使用的编码
locale 

当前已经下载的编码集
locale -a

就算时locale使用的zh_CN.UTF-8 但是没有下载就同样会乱码或者签名出问题

使用locale -a进行查看

设置编码集如下方dockerfile配置中RUN yum那一条

#1.指定基础镜像,并且必须是第一条指令
FROM centos:7

#2.指明该镜像的作者和其电子邮件
MAINTAINER cxy

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /home

#设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#设置字符集为zh_CN.UTF-8
RUN yum -y install kde-l10n-Chinese \
  && yum -y reinstall glibc-common \
  && localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 \
  && echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf \
  && source /etc/locale.conf \
  && yum clean all 
#配置环境用ENV
ENV LANG=zh_CN.UTF-8 \
    LC_ALL=zh_CN.UTF-8

#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
COPY jdk1.8.0_351 /home/jdk1.8.0_351
COPY redis-6.0.16 /home/redis-6.0.16  
# 复制tomcat例子(自己程序的tomcat)
COPY tomcat /home/tomcat  

# 暴露Redis端口
EXPOSE 6379

#容器启动时需要执行的命令xshell脚本文件
CMD /home/start.sh

4.2、xshell脚本文件编写(多条启动时使用,不强制使用)

启动redis 以及 tomcat + 日志打印

echo "Starting redis"
/home/redis-6.0.16/src/redis-server /home/redis-6.0.16/redis.conf &
echo "Starting cost_cxy"
/home/tomcat/cost_cxy/bin/startup.sh &
tail -f /home/tomcat/cost_web/logs/catalina.out

含有多条命令就继续接&如下

echo "Starting redis"
/home/redis-6.0.16/src/redis-server /home/redis-6.0.16/redis.conf &
echo "Starting mosquitto"
/home/tomcat/src/mosquitto 

手动编写的代码会包含特殊符号,使用命令清除

#安装
yum install dos2unix
#转换
dos2unix start.sh  进行转换

4.2、构建镜像

注意1:需要在dockerfile文件同级才能构建镜像

注意2:如果链接VPN有限制的话也可能参数构建失败(值得注意!!!)

#构建名称为cxy的镜像,可以修改名称依据实际
docker build -t cxy .

4.3、缓存清除(注意:删除所有镜像和容器)

vm容量小的时候需要清除再build可以使用下方命令(不一定需要执行)

首先查看目录下的剩余空间
df -hl /var/lib/docker
执行命令,深度清除缓存
docker system prune -a --force

4.4、登录、推送、标记、启动

登录

登录
docker login cxy.com
账号
cxy666
密码
queshi6

推送到自己的镜像仓库

标记
docker tag SOURCE_IMAGE[:TAG] 网址/REPOSITORY[:TAG]
如下
docker tag cxy:latest cxy.com/repository/cxy:latest
推送
docker push 网址/REPOSITORY[:TAG]
如下
docker push cxy.com/repository/cxy:latest

启动

简单启动

docker run cxy 

复杂启动 如下 请查询

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

--volume , -v: 绑定一个卷

简易比方

使用镜像 cxy:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /home 映射到容器的 /home。

docker run -p 80:80 -v /home:/home -d cxy:latest

5、总结

docker简单的使用就如上方,更加精进的操作还需要各位进行推荐。仅一方拙见,有好的建议请通知修改、感谢。

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/CXY_1274511216/article/details/135836530
版权归原作者 CXY_1274511216 所有, 如有侵权,请联系我们删除。

“docker、dockerfile从0->1(亲身体验)”的评论:

还没有评论