docker专项(一)基本使用

docker(容器技术的一种实现) 我们经常会使用docker构造虚拟化环境,docker自动化部署已经慢慢成为发展的趋势。本人介绍下docker的基本使用,本人linux发行版本为centos7.4

基本概念

使用docker接触最多的就是以下3个概念,

  • 镜像:image (理解成打包好的代码)
  • 容器:container(跑代码的环境 例如lnmp)
  • 仓库:repository(代码仓库git)
docker的安装
# 卸载原来的docker
yum remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine

# 安装依赖
yum update -y && sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

# 添加官方yum库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装docker
yum install docker-ce docker-ce-cli containerd.io

# 查看docker版本
docker --version

# 开机启动
systemctl enable --now docker
理解下Dockerfile

Dockerfile是一个文本文件,它包含了一些指令,docker镜像的构建就是通过Dockerfile中的这一条一条的指令完成的。也就是说,要构建一个镜像,就需要一个Dockerfile,然后根据自己的需求配置一些指令集合,下面就看一下Dockerfile中使用的一些指令。

基本命令
  • FROM:指定基础镜像

    定制我们的镜像,是需要以一个镜像为基础的,就是基础镜像,例如Ubuntu、 nginx、postgres、mysql等,例如,FROM Ubuntu:16.04,如果本地有Ubuntu基础镜像则使用本地基础镜像,如果没有则会到官方镜像仓库拉取,16.04是镜像版本号,如果不指定则会拉取lastest。

  • RUN:执行命令

RUN指定我们在构建镜像时需要执行的命令,比如apt-get install安装某个软件,pip install安装Python依赖包,配置软件源,配置时区等, 例如,RUN apt-get install python3。

  • ADD和COPY:文件操作

ADD和COPY是两个功能类似的指令,一般优先使用COPY,它比ADD更透明,它的功能是将本地文件拷贝到容器中,例如,COPY ./ /home/jackpop/test。

  • WORKDIR:指定工作路径

指定镜像的运行时的工作路径,例如,WORKDIR /home/jackpop/test 。

  • ENTRYPOINT:设置镜像主命令

指定镜像运行是运行的命令,例如, ENTRYPOINT ["python", "-m", "main"]。

  • LABEL:添加标签

可以为镜像添加标签来帮助组织镜像、记录许可信息、辅助自动化构建等。

  • CMD:执行目标镜像中包含的软件

如果创建镜像的目的是为了部署某个服务,可能会执行某种形式的命令,可以包含参数。

  • EXPOSE:指定监听端口

给外部访问指定访问端口。

  • ENV:环境变量

为了方面程序运行,有时需要更新环境变量。

  • VOLUME:暴露数据库存储文件
  • USER:指定当前用户

其中常用的命令就是FROM、COPY、WORKDIR、RUN、ENTRYPOINT

查看下本地镜像
docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              4e2eef94cd6b        2 weeks ago         73.9MB
hello-world         latest              bf756fb1ae65        8 months ago        13.3kB
查看本地容器
docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
d5337e4b0075        ubuntu              "/bin/bash"         9 days ago          Exited (0) 9 days ago                       happy_diffie
eea560bed5b8        hello-world         "/hello"            9 days ago          Exited (0) 9 days ago

启动、停止、重启容器

#docker start $container_id 启动容器
docker start d5337e4b0075
d5337e4b0075
[root@izuf69nj83ng3r7vgh9pmhz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
d5337e4b0075        ubuntu              "/bin/bash"         9 days ago          Up 8 seconds                                happy_diffie
eea560bed5b8        hello-world         "/hello"            9 days ago          Exited (0) 9 days ago                       cranky_edison
#可以看到容器id的status  是Up 8 seconds
#docker stop $container_id  停止容器
ocker stop d5337e4b0075
d5337e4b0075
[root@izuf69nj83ng3r7vgh9pmhz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
d5337e4b0075        ubuntu              "/bin/bash"         9 days ago          Exited (0) 4 seconds ago                       happy_diffie
eea560bed5b8        hello-world         "/hello"            9 days ago          Exited (0) 9 days ago                          cranky_edison
#可以看到容器的状态是退出的

# docker restart $container_id 重启容器 这里不做演示了

镜像常用命令

#退出和进入镜像
exit
docker exec $container_id /bin/bash
#启动镜像
docker run $image_id
#拉取镜像
docker image pull ubuntu
#从Dockerfile创建镜像
docker build
#从一个修改的容器创建镜像 这个有点像git修改后 commit
docker commit
#容器与本地之间复制文件
docker cp
#将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
#推送镜像
docker push
# 为镜像打标签 
docker tag
#将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。
docker tag ubuntu:15.10 runoob/ubuntu:v3
#重命名容器 docker rename 原容器名称 新容器名称
docker rename
#删除容器
docker rm
#删除镜像
docker rmi
#搜索镜像
docker search
开始构建自定义镜像

创建一个目录,里面包含Dockerfile main.py

[root@izuf69nj83ng3r7vgh9pmhz dockertest]# ls
Dockerfile  main.py

Dockerfile内容

FROM ubuntu
COPY ./ /home/Test
WORKDIR /home/Test
RUN apt-get update &&  apt-get install -y python3 python3-pip \
&& ln -s pip3 /usr/bin/pip \
&& ln -sf /usr/bin/python3 /usr/bin/python \
&& python /home/Test/main.py

main.py内容

from time import sleep
def main():
    for i in range(18):
        print(i)
        sleep(1)
if __name__ == '__main__':
    main()

开始构建

docker build -t demopys:v1.0 .
image.png
#查看镜像列表 demopys   就是你刚构建的镜像标签
docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
demopys             v1.0                22bba38a326c        47 seconds ago      390MB

我们启动一个容器 装载我们刚构建的镜像 并且进入到该容器,在容器内执行/bin/bash命令

[root@izuf69nj83ng3r7vgh9pmhz dockertest]#  docker run -it 22bba38a326c /bin/bash
root@672b16e697d5:/home/Test# ls
Dockerfile  main.py

docker的基本知识就这么多了,后续会更新容器仓库,容器编排等相关知识

你可能感兴趣的:(docker专项(一)基本使用)