docker的使用
docker概念
- 镜像文件,可以理解为操作系统的镜像
- 容器实例,可以理解为微型的操作系统
- 仓库,存储docker景象文件的地方
docker的安装(docker官网有安装指导)
可以参考对应系统的安装相关
https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository
centos系统
-
yum安装,配置yum仓库
-
仓库配置,阿里云、清华等(版本可能略低)
-
建议选择官方的安装源(最新的)
1.卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 2.设置存储库 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 3.安装docker社区版 sudo yum install docker-ce 4.启动关闭docker systemctl start docker
-
-
rpm安装,不推荐
-
源码编译安装,比较麻烦,没有特定需求还是建议使用yum
ubuntu18.04安装docker(这是本人安装执行命令记录历史,照着来应该没有问题,不过我使用的是root权限)
dpkg -l | grep docker | awk -F' ' '{print $2}'|xargs -n 1 apt -y remove
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-get update
apt-cache madison docker-ce
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
docker run hello-world # docker run 自动下载本地不存在但是仓库中存在的镜像
docker服务相关命令
systemctl status/start/stop docker
docker镜像、仓库、容器的增删改查管理、使用命令
镜像
-
增
从远程仓库中下载Centos镜像
docker pull centos
-
删
docker删除镜像
docker rmi 容器标识ID/镜像名称 # 该命令的解释应该是 remove image 简写为 rmi # 如果有容器进程正在使用要删除的docker镜像,则删除不成功会报错。 # 删除镜像是将docker镜像从本地的docker仓库中将要删除的镜像移除。 docker rmi -f 容器标识ID/镜像名称 # 该命令是强制删除容器命令镜像,无论是否有容器使用和依赖该镜像。
docker删除容器
docker rm 容器标识ID # 该命令是删除容器
-
改
docker启停
docker start 容器标识ID docker stop 容器标识ID
-
查
docker 从远程仓库查找镜像,相当于从官网仓库中直接搜索镜像名字所获的结果
docker search centos
docker查看本地所有的镜像文件
docker images
查看本地docker运行过哪些容器,包括已经运行结束(docker容器如果没有在后台运行的话,就会执行结束退出)
也就是说,容器随时创建,随时删除的
docker ps -a
查看本地docker正在运行的程序
docker ps
显示所有的容器ID
docker ps -aq
-
用
运行一个“活着”的容器
docker run -d centos /bin/sh -c "while true;do echo '你个糟老头子,不听课,坏的很'; sleep 1;done" # 参数说明: # -d 后台运行 # centos 指定运行的容器镜像名称 # /bin/bash 指定运行容器镜像的shell解释器 # -c 指定一段shell解释代码
查看容器的标准输出
docker logs 容器标识ID
进入容器内
docker exec -it 容器标识ID /bin/bash 命令说明: -i 交互式命令操作 -t 开启一个终端 容器标识ID指定要操作 的容器 /bin/bash 指定终端登陆的解释器
补充:
查看系统发行版本命令
cat /etc/system-release
cat /etc/os-release
-
自定制的镜像文件
# 首先进入容器 docker run -it 镜像 /bin/bash 或者 docker exec -it 一个正在运行的容器ID /bin/bash # 安装或部署配置环境,例如执行如下命令安装vim yum -y install vim # 然后退出 exit # 然后查看刚刚运行容器的ID docker ps -a # 根据标识ID,将需要提交打包的容器 docker commit 容器标识ID 容器镜像名称 # 导出docker镜像成为一个压缩文件 docker save 要导出的镜像名称 > 导出镜像命名全路径 # 删除原镜像 docker rmi 镜像名称/容器ID # 将导出的镜像压缩文件重新倒入本地仓库 docker load < 要道如的镜像文件压缩包 # 查看倒入是否成功 docker images # 如果导入成功,则启动进入容器,验证环境是否符合预期 docker exec -it centos /bin/bash
-
docker启停app,以及端口映射,启动一个镜像容器,并将容器提供服务的端口映射到宿主机上
docker run -d -P 容器镜像 python app.py # 命令说明 # -d 后台运行 # -P 随即端口映射 # -p portA:portB 指定端口映射 例如 -p 8888:5000 意思是将 docker容器5000端口映射到宿主机的8888端口上
需要注意的是注意宿主机防火墙和云服务端口限制等设置
-
docker加速器(配置国内下载源)
# 具体步骤可以查看 https://www.daocloud.io/mirror curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
-
docker的自定义制作镜像文件
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image FROM centos #使用base image FROM ubuntu:14.04 #带有tag的base image LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释 LABEL maintainer=“yc_uuu@163.com" # 指定作者信息 #对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令! RUN yum update && yum install -y vim \ Python-dev #反斜线换行 RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME” WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd WORKDIR /test #如果没有就自动创建 WORKDIR demo #再进入demo文件夹 RUN pwd #打印结果应该是/test/demo # ADD and COPY # ADD 存在压缩文件的解压功能,因此只是将文件copy到容器中,应该使用COPY而不是ADD # ADD与COPY # - 优先使用COPY命令 # -ADD除了COPY功能还有解压功能 # 添加远程文件/目录使用curl或wget ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录 ADD test.tar.gz / #添加到根目录并解压 WORKDIR /root ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径 COPY hello test/ #等同于上述ADD效果 ENV #环境变量,尽可能使用ENV增加可维护性 ENV MYSQL_VERSION 5.6 #设置一个mysql常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}”
-
下面开始自定义一个docker flask web 服务器容器
# 1、编写web服务 cat app.py #coding:utf8 from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return "hello docker" if __name__=="__main__": app.run(host='0.0.0.0',port=8080) # 2、编写Dockerfile FROM new_ubuntu RUN apt-get install -y gnupg2 RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8 RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak COPY sources.list /etc/apt/ RUN apt update RUN apt -y install python3-pip RUN pip3 install flask COPY app.py /opt/ WORKDIR /opt EXPOSE 8080 CMD ["python3","app.py"] # 3、构建docker容器 docker build -t ubuntu_flask . # 4、构建完成查看镜像 docker images # 5、启动docker实例,并进行映射 docker run -d -p 8081:8080 ubuntu_flask #6、宿主机访问验证 curl http://127.0.0.1:8081 #7、验证成功关闭docker实例 docker stop 实例ID
-
仓库
登陆docker共有仓库
docker login
用户名:yuchao163
密码:
将本地镜像push到远程仓库中
docker push docker.io/本地镜像名 yuchao163/自定义镜像名
从共有仓库中拉取镜像
docker pull yuchao163/要下载的共有仓库镜像
docker私有仓库搭建
docker run -d -p5000:5000 \
-v /opt/data/registry:var/lib/registry \
registry
-v参数,将宿主机器上的文件夹目录映射到容器内的文件夹,在容器内通过访问被映射文件路径访问操作宿主机文件路径
其中registry是要安装下载的镜像
修改docker的配置文件使其支持非安全的https的方式推送镜像
cat /etc/docker/daemon.json
{"registry-mirrors":["http://95822026.m.daocloud.io"],
"insecure-registrues":["192.168.10.200:5000"]
}
修改系统启动文件 /lib/systemd/system/docker.service
EnvironmentFile=-/etc/docker/daemon.json
修改完成后重新加载配置
systemctl daemon-reload
重新启动docker服务
systemctl restart docker
docker tag docker.io/hello-world 192.168.10.200:5000/test_hello
访问 192.168.10.200:5000/