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简单的使用就如上方,更加精进的操作还需要各位进行推荐。仅一方拙见,有好的建议请通知修改、感谢。
版权归原作者 CXY_1274511216 所有, 如有侵权,请联系我们删除。