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的基本知识就这么多了,后续会更新容器仓库,容器编排等相关知识

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358