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 服务器容器

编写web服务

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)

编写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/

版权声明:除特别注明外,本站所有文章均为王晨曦个人站点原创

转载请注明:出处来自王晨曦个人站点 » docker的使用

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注