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结束后,查看镜像就可以看到刚刚创建的环境了