Docker学习笔记二

一.在linux上安装docker

 1 sudo apt update
 2 sudo apt install docker.io
 3 sudo apt install curl
 4 sudo curl -fsSL get.docker.com -o get-docker.sh
 5 sudo sh get-docker.sh --mirror Aliyun
 6 sudo systemctl enable docker
 7 sudo systemctl start docker 
 8 sudo groupadd docker               
 9 sudo usermod -aG docker $USER 
10 
11 # 接下来要重新登陆Ubuntu,终端输入docker info
12 # 出现containers 、server信息说明安装成功
13 
14 # 接下来配置国内镜像加速
15 # 在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
16 
17 {
18      "registry-mirrors": 
19        [ "https://registry.docker-cn.com" ]
20  }
21      
22 # 重新启动服务
23 sudo systemctl daemon-reload
24 sudo systemctl restart docker
25 
26 #安装成功

二.写Dockerfile

菜鸟教程定义为:Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

形如

 的文件

由指令(大写) + 内容构成

常用的指令有:

FROM:

  基础镜像,即所需要的背景环境

  eg:FROM ubuntu18.04             #基于ubuntu18.04的环境中执行后续操作

  eg:FROM nginx                         #基于nginx做后续的操作

 RUN:

  执行其后的命令行指令(无需加sudo)

  eg:RUN apt update

  注意:1.如果是执行过程中会询问 [Y/N] 这样的指令,那么在写RUN指令的时候可以写成    RUN echo y | apt update  这样的形式

       2.如果是需要连续执行多条指令,不要写成:

      RUN XXXXXXX

      RUN XXXX

      RUN XXXXX

      ......

      这样的形式

      会造成镜像膨胀过大

      应写成

      RUN XXXXXXX &&

      RUN XXXX &&

      RUN XXXX &&

         apt clean 

CMD:

  用于运行程序,但与RUN不同

  CMD是在Docker run时运行

  RUN是在Docker build时运行

  CMD指定的程序运行结束,容器也就结束,CMD指令指定的程序可被docker run命令行参数中指定要运行的程序所覆盖,且如果Dockerfile中存在多个CMD指令,仅最后一个生效

  eg:CMD <shell 命令>

    CMD <"可执行文件或命令","param1","param2"......>

三.build Dockerfile tobe image

这一步之前可以先去docker hub创建一个账户,用于以后上传保存仓库

写好Dockerfile之后,需要build才能成功建立所需环境

使用:

$  docker build -t ruiruirui/repository的名字:tag的名字 -f dockerfile的名字 .

 当出现:

Successfully build xxxxxxx

Successfully tagged ruiruirui/repository的名字:tag的名字

时,说明build成功了

附:

查看有哪些docker image

docker image ls

查看有哪些docker 容器及状态

docker ps -a

一.

把本地docker镜像文件推到hub上的方法是:

先在终端输入 docker login

输入username和password,登录成功后,输入

$  docker push 用户名/repository的名字:tag的名字

就可以把本地docker文件推到hub上了

二.

run docker image的方法常用的有

1. $  docker run -it --rm --privileged repository名:tag名 bash

2. $  docker run -d --rm 用户名/repository名:tag名 tail -f /dev/null(这里是举个栗子,主要看tail,是为了保持image运行)

3. $ docker exec -it  写containerID  bash

stop docker run的方法常用的有

1. $  docker stop  写containerID

三.

使用$  echo y | docker system prune 去修剪、清理无用的image

echo 是自动选择了yes(可以echo n 去自动选择no)

四.

映射

在linux上用

$ sudo docker run -it --rm --privileged -v /home/julie/dockerfile/:/dockerfile ruirui2333/ubuntu:test bash

使用 -v 来创建映射,冒号是映射的地址,映射一次就要用一次-v  ----  用这种方式打开的image,在宿主机上会新建一个叫做dockerfile的文件夹,在image里进行的操作都会同步到宿主机上,此操作是不可逆的

若在run的时候并不确定是否要在宿主机上同步操作,可以在image上做完操作之后,使用docker cp tag名:宿主机位置 ./  来把修改同步到宿主机上

eg:docker run -it --rm --privileged -v /usb/bus/dev:/usb/bus/dev -v $PWD/p8log:/p8log ruirui2333/appium:justtest bash

 第一个映射是映射了usb,即可以在容器中使用adb(要先把linux的adb server关掉,才能在linux上启动的容器里使用adb)

第二个映射的内容是:在宿主机当前位置创建的p8log,映射到home下当前用户下的p8log文件夹

小结:

首先在linux上安装好docker作为基础

写dockerfile,相当于一份guide

build dockerfile,即按照guide去建造环境,build结束后,查看镜像就可以看到刚刚创建的环境了

原文地址:https://www.cnblogs.com/RuiRuia/p/14075274.html