Docker

Docker——入门实战

ubuntu安装

docker

环境:centos7

安装步骤
1.CentOS官方的docker安装步骤(版本可能会有点低)升级到最新版

yum install -y docker
docker version

2.使用在线脚本安装(推荐)

curl -fsSL https://get.docker.com -o get -docker.sh

sudo sh get-docker.sh -- mirror Aliyun

启动

sudo systemctl enable docker  --开机启动docker

systemctl start docker  启动docker


docker info  查看docker的信息 

建立docker用户组

sudo groupadd docker  #建立用户组

sudo usermod -aG docker $USER   #将当前用户加入docker组

docker镜像加速
在/etc/docker/daemon.json写下如下内容

{
 "registry-mirrors":[
        "http://hub-mirror.c.163.com"
  ]
}

重启服务生效

sudo systemctl daemon-reload

sudo systemctl restart docker

docker info   查看是否使用了加速镜像

运行第一个docker容器
1.查看有无docker镜像

docker images

2.运行docker容器,如果没有镜像,这个命令会自己去下载镜像

(如果遇到net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting head的错误)

docker run centos:7 sleep 1000

3.新打开一个linux终端,之前终端会睡眠在Status: Downloaded newer image for docker.io/centos:7,查看系统运行了哪些容器

docker ps

docker ps -a 

4.查看docker容器的目录

docker run -t -i centos:7 ls /

5.运行一个新容器并进入命令行

docker run -t -i centos:7 bash

ls

echo "HELLO WORLD" >test.txt

cat test.txt

ls

exit

6.再创建一个新容器并操作

docker run -t -i centos:7 bash

ls

exit

这时会发现test.txt不见了,运行一个新容器会清空之前容器的内容

创建docker镜像
一、docker commit命令

1.docker ps -a 获取 CONTAINER ID

2.docker commit 807b6df15cd9 huang/centos:1.0    创建docker镜像

3.docker images 查看存在的镜像    

4.docker run -ti huang/centos:1.0 bash

二、docker build 命令(打包容器成为镜像)

1.mkdir demo

2.cd demo

3.echo "hello world" > test1.txt

3.echo "hello boy" > test2.txt

4.vi Dockerfile

FROM centos:7

COPY test1.txt /demo/
COPY test2.txt /demo/

5.docker build -t huang/demo:1.0 .

6.docker images

7.docker run -ti huang/demo:1.0 bash

COPY为docker build的指令,其他docker build指令略

定制镜像,运行jar
准备一个war包,上传至服务器宿主机,并在同级目录下创建Dockerfile

touch Dockerfile

vi Dockerfile

在这里插入图片描述

执行构建

docker build -t session-web:latest

docker images 查看本地是否有镜像

docker run --name session-web -d -p 8888:8080 session-web:latest  运行容器

常见命令

1. docker ps    查看运行的容器

   docker ps -a   查看所有容器

          1.1.docker inspect  a6cf4fb96210    根据ID查看容器的信息

2. docker stop a6cf4fb96210     停止一个容器

3. docker start a6cf4fb96210      启动一个已经存在的容器

4. docker rm -f a6cf4fb96210      删除一个容器

5. docker run -d --name hello_world centos:7 sleep 10     -d后台启动 一个容器并命名

6. docker exec -it a6cf4fb96210  /bin/bash         进入容器

  docker run -it 表示运行容器并进入交互界面,想退出容器可以按Ctrl+P+Q或者输入exit ,退出容器且不停止容器

  docker run -d 表示后台启动容器

7. docker cp /root/1.txt a6cf4fb96210:/usr/local/   从宿主机复制文件到容器,交换顺序则从容器复制文件到宿主机

8. docker search mysql    搜索想要的镜像去下载如:mysql

        https://hub.docker.com/explore/

 

docker安装mysql

1.docker pull mysql

2.启动mysql

docker run -p 3306:3306 --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
3.docker exec -it mysql /bin/bash

4.mysql -uroot -p123456

5.ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

数据卷
宿主机和容器之间共用一份目录和文件,即使容器被销毁,数据不会丢失

方法1: Dockerfile中指定VOLUME后的目录,如 VOLUME /var/lib/test

方法2:docker run 后加 -v,如

docker run -d -p 8080:8080 --name tomcat1 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7

:左边对应宿主机目录,右边对应容器目录

附:

 docker stop $(docker ps -q)      停用全部运行中的容器

docker rm $(docker ps -aq)         删除全部容器

docker stop $(docker ps -q) & docker rm $(docker ps -aq)      一条命令实现停用并删除容器

docker rmi  【镜像id】   删除镜像

Docker命令

新建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG]

OPTIONS说明:
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式:

  1. ip:hostPort:containerPort
  2. ip::containerPort
  3. hostPort:containerPort
  4. containerPort

退出容器两种方式:

  1. exit -> 容器停止退出
  2. ctrl + P + Q -> 容器不停止退出
  3. 重新进入容器docker attach + CONTAINER ID

19 容器数据卷用v命令添加

容器数据卷作用:

  1. 容器持久化
  2. 容器间继承+共享数据

命令添加数据卷:

读写

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
例: docker run -it -v /myDataVolume:/dataVolumeContainer centos

只读

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
例: docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos

添加成功后主机和容器会生成对应的文件夹,文件夹下主机或容器对文件的操作是同步的(双向的),容器停止后,主机修改数据仍然同步
只读模式下,容器内不可以新建和修改文件,只有主机有权限创建和修改文件,主机对文件的操作会同步到容器中。
进入centos容器的终端执行命令:

docker run -it centos /bin/bash

以json传的形式查看容器信息:

docker inspect + CONTAINER ID
例: docker inspect 67bcd76b7531

在这里插入图片描述
只读时的容器信息:
在这里插入图片描述

20 容器数据卷用DockerFile添加

DockerFile是什么?

类似 JavaEE Hello.java -----> Hello.class的编译文件
Docker images ------> DockerFile
DockerFile是images镜像模板的描述文件

容器内添加数据卷

  1. 容器内根目录新建mydocker文件夹并进入
  2. 可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷
  3. 构建DockerFile
# volume test
FROM centos
VOLUM["/dataVolumContainer1","/dataVolumeContainer2"]
CMD echo "finished, ------success1"
CMD /bin/bash
  1. build后生成镜像--->获得一个新镜像zzyy/centos,镜像内带有dataVolumContainer1和dataVolumContainer2文件夹,与主机的文件夹同步,目录地址看第六步
docker build -f /mydocker/dockerfile -t zzyy/centos .

-f : file,指明dockerfile位置
-t : 命名空间
zzyy/centos : 镜像名字
. 代表当前目录下

  1. run容器docker run -it zzyy/centos
  2. 最后根据命令docker inspect + CONTAINER ID可以看到对应的主机目录地址

Docker挂载主机目录Docker访问出现cannot open directory .:Permission denied
解决方法: 在挂载目录后多加一个--privileged=true参数即可

docker run -it -v /宿主机绝对路径目录:/容器内目录 --privileged=true 镜像名

21 容器数据卷volums-from

  1. 先启动一个父容器dc01, 在文件夹dataVolumContainer2中新增内容
docker run -it --name dc01 zzyy/centos
  1. 再启动容器dc02/dc03继承dc01,在dc02/dc03容器中修改内容
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
docker run -it --name dc03 --volumes-from dc01 zzyy/centos
  1. 回到dc01可以看到在dc02/dc03修改的内容
  2. 删除dc01后修改dc02的内容,dc03中的内容仍然会更新
    结论:容器间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

22 DockerFile是什么

概念

DocerkFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

构建DockerFile三步骤

  1. 编写DockerFile文件
  2. docker build --->镜像
  3. docker run ----->容器

DockerFile样例

FROM scratch
MAINTAINER the Centos Project <cloud-ops@centos.org>
ADD c68-docker.tar.gz /
LABLE name="Centos Base Image"\
vendor="Centos" \

#Default command
CMD ["/bin/bash"]

23 DockerFile构建过程解析

DockerFile内容基础知识

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. 表示注释

  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

24 保留字指令

FROM:进出镜像,当前镜像是基于哪个镜像的

MAINTAINER:镜像维护者的姓名和邮箱地址

RUN:容器构建时需要执行的命令

EXPOSE:当前容器对外暴露出的端口号

WORKDIR:指定在创建容器后,终端默认登录的进来工作目录,一个落脚点,如果没有指定默认是根目录"/"(就像进入linux系统默认进入的是/root文件夹下)

ENV:用来在构建镜像过程中设置环境变量

ADD:将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压tar压缩包

COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

VOLUME:容器数据卷,用于数据保存和持久化工作

CMD:指定一个容器启动时要运行的命令。DockerFile中可以有多个CMD命令,但只有最后一个生效(不代表之前的命令不执行),CMD会被docker run之后的参数替换

ENTRYPOINT:指定一个容器启动时要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,不过它的命令是追加的,都会执行

ONBUILD:当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

25 DockerFile案例-自定义镜像mycentos

Base镜像(scratch):DockerHub中99%的镜像都是通过在Base镜像中安装和配置需要的软件构建出来的。

从dockerhub下载的centos默认工作目录是根目录"/",且不支持vim和ifconfig,现在要自定义一个mycentos默认工作目录是/tmp,且支持vim和ifconfig

1. 编写DockerFile

FROM centos
# 配置环境变量和工作目录
ENV MYPATH /tmp
WORKDIR $MYPATH
# 安装vim,net-tools
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露80端口
EXPOSE 80

CMD echo $MYPATH
CMD echo "success------------ok"
CMD /bin/bash

2. 构建

docker build -t 新镜像名字:TAG .
例:docker build -f /mydocker/Dockerfile -t mycentos:1.3 .
# 查看新镜像
docker images mycentos

3. 运行

docker run -it 新镜像名字:TAG

4. 查看镜像的变更历史

# 查看镜像的变更历史
docker history + IAMGE ID

26 DockerFile案例-CMD-ENTRYPOINT命令案例

1) CMD

执行命令

# 启动tomcat
docker run -it -P 7777:8080 tomcat ls -l

不会启动tomcat,因为docker run后的命令ls -l替换了DockerFile里面最后的

CMD ["catalina.sh","run"]

相当于执行了

CMD ls -l

所以tomcat没有运行

2) ENTRYPOINT

构建dockerfile

FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn"]
# 构建镜像
docker build -f /mydocker/dockerfile -t myip .
# docker run后会返回ip信息
docker run myip
# 如果需要查看,表头信息需要追加命令 -i,即
docker run myip -i
# 相当于执行了
curl -s -i http://ip.cn

如果用CMD构建的dockerfile

FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://ip.cn"]

执行命令

docker run myip -i

则会报错,相当于执行了

CMD -i

28 DockerFile案例-自定义tomcat

运行自定义tomcat

docker run -d -p 9080:8080 --name myt9
-v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test
-v /zzyyuse/mydockerfile/tomcat9/tomcat9logs:/usr/local/apache-tomcat-9.0.8/logs
--privileged=true
zzyytomcat9

这样就可以直接在主机的9080端口查看tomcat,在/zzyyuse/mydockerfile/tomcat9/test目录部署项目,在/zzyyuse/mydockerfile/tomcat9/tomcat9logs目录查看log了

posted @ 2020-10-09 11:32  fat_bird  阅读(45)  评论(0)    收藏  举报
category top