Docker基础教程




centos7 yum 卸载已安装的docker centos7删除docker_docker 删除镜像


  • 安装Docker
  • 管理Docker虚拟机
  • DaoCloud镜像加速器
  • 镜像
  • 容器
  • 镜像发布

一,安装Docker

安装docker

环境:centos7.x

首先更新yum sudo yum -y update

然后执行安装命令 sudo yum install -y docker

Docker 默认的位置: /var/lib/docker

二、管理Docker虚拟机

(1)管理Docker虚拟机命令

启动Docker

sudo systemctl start docker

重启Docker

sudo systemctl restart docker

关闭Docker

sudo systemctl stop docker

(2)一图读懂Docker命令


centos7 yum 卸载已安装的docker centos7删除docker_docker java镜像_02


(3)给当前用户赋予执行docker命令权限

# 创建docker用户组

1.sudo groupadd docker

# 将当前用户添加到docker组中

2. sudo gpasswd -a ${user} docker

# 重启docker进程

3.sudo systemctl restart docker

4.重新登录shell

三、DaoCloud镜像加速器

1.DaoCloud官网地址

https://www.daocloud.io/mirror

2.配置DaoCloud

2.1 shell下执行命令:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

2.2 执行完上述命令后,多了个逗号,打开/etc/docker/daemon.json文件,去掉“,”;


centos7 yum 卸载已安装的docker centos7删除docker_docker 删除镜像_03


2.3重启docker

sudo systemctl restart docker

四、镜像

1.在线安装镜像

从dockerhub上搜索镜像并在线安装。

dockerhub地址: https://hub.docker.com/

在线 安装镜像,不需要注册

推送自己的镜像到dockerhub,需要注册用户

案例:在线安装java镜像

step1: 搜索java镜像

docker search java


centos7 yum 卸载已安装的docker centos7删除docker_docker centos镜像_04


step2:从dockerhub拉去并安装java镜像

docker pull docker.io/java

2,镜像相关基础命令

(1)查看所有安装的镜像

docker images

(2)修改docker镜像名称

docker tag oldname newname

docker tag docker.io/java java

(3)备份镜像

镜像导出

docker save java> /home/java.tar.gz

镜像导入

docker load < /home/java.tar.gz

(4)删除镜像

docker rmi 镜像名称或镜像id

(5)查看镜像依赖

docker history imageid

3,编写Dockerfile

3.1,执行hellowold-dockerfile

3.2,Dockerfile语法梳理及最佳实践

FROM

选取base image

FROM scratch

scratch表示不依赖任何image,从头制作.

LABEL

镜像作者信息

LABEL maintainer="gy@qq.com"

LABEL version="1.0"

LABEL description="this is description"

RUN

执行命令并创建新的Image Layer


centos7 yum 卸载已安装的docker centos7删除docker_docker centos镜像_05


WORKDIR

设定当前工作目录,类似于 cd命令

WORKDIR /root 如果没有会自动创建root

WORKDIR demo

RUN pwd 输出结果/root/demo

ADD and COPY

将本地文件添加到docker image中

ADD

ADD hello / 将hello文件添加到根目录

ADD test.tar.gz / 添加到根目录并解压

WORKDIR /root ADD hello test/ 添加到/root/test中

COPY

WORKDIR /root COPY hello test/

ADD与COPY区别

ADD除了COPY还可以对tar.gz解压缩

ENV

存储和网络

VOLUME

EXPOSE

Shell和Exec

shell:将要运行的命令作为shell脚本执行


centos7 yum 卸载已安装的docker centos7删除docker_docker 删除镜像_06


CMD

  • 设置容器启动后默认执行的命令和参数
  • 如果docker run指定了其它命令,CMD命令会被忽略
  • 如果定义了多个CMD,只有最后一个会执行

ENTRYPOINT

  • 设置容器启动时运行的命令
  • 让容器以应用程序或者服务的形式运行
  • 不会被忽略,一定会执行

3.3Dockerfile学习资料

Dockerfile在github上的代码库

https://github.com/docker-library/

Dockerfile reference

https://docs.docker.com/v17.09/engine/reference/builder/

五、容器

1.容器基础命令

启动容器: docker run

docker run -it --name 容器名称 镜像名称 bash

docker run -it -p 9000:8080 -p 9001:8888 --name 容器名称 镜像名称 bash

docker run -it -v /home/project:/soft --privileged --name 容器名称 镜像名称 bash

-it:代表交互式运行,进入docker环境

--name代表容器名称

-p 9000:8000 将宿主机9000端口映射到docker容器的800端口

-v 将宿主机/home/project映射到容器的/soft目录

--privileged 代表docker拥有操作宿主机文件的最高权限

查看正在运行的容器

docker container ls -a

docker ps -a

案例:启动docker容器,并在容器中创建文件,将文件映射到宿主机中。

sudo docker run -it -p 9000:8080 -v /usr/gy/docker:/soft --privileged --name myjava docker.io/java bash

cd /soft

touch hello.txt

echo "hello">hello.txt

结果: 宿主机的/usr/gy/docker中有文件hello.txt

退出容器 exit

暂停容器 docker pause myjava

恢复容器运行 docker unpause myjava

停止容器 docker stop myjava

重新启动容器 docker start -i myjava

删除容器

可以使用"docker rm 容器id"来删除一个终止状态的容器;若要删除一个运行 中的容器,需要加-f参数

sudo docker rm -f 8023be72d98f

删除所有容器

docker rm $(docker container ls -al)

删除所有退出的容器

docker rm $(docker container ls -f "status=exited" -q)

2.基于容器创建新的镜像

方法一:docker container commit containerName newImageName

简写:docker commit containerName newImageName

案例:基于centos容器创建新的镜像

step1:启动centos容器 docker run -it centos

step2: 改变容器的内容

安装vim yum install -y vim

step3:将改变后的容器,重新编译成image


centos7 yum 卸载已安装的docker centos7删除docker_docker java镜像_07


step4: docker commit jovial_mcnulty gy/centos-vim


centos7 yum 卸载已安装的docker centos7删除docker_docker centos镜像_08


方法二、Dockerfile

案例:基于centos容器创建新的镜像

在宿主机上执行以下命令:

1,创建并进入目录 /usr/gy/docker/docker-centos-vim

2,创建并编写Dockfile文件

vi Dockerfile

#基于docker.io/centos镜像构建

FROM docker.io/centos

#运行安装vim命令

RUN yum install -y vim

3,运行命令

docker build -t gy/centos-vim-new .

-t:代表生成的镜像名称

. 点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点

问题:镜像是只读的为什么能安装vim?

答案:镜像在运行过程中会生成一个临时容器,将vim安装到临时容器中,最后将临时容器转成新的镜像同时临时容器被删除

六、镜像发布

  1. 镜像上传到dockerhub

注意点:镜像名字: dockerhub-用户名/镜像名称,否则出现无权限提示


centos7 yum 卸载已安装的docker centos7删除docker_docker centos镜像_09


step1:docker login

登录dockerhub

step2: docker push imagename

step3: 验证:

方法一:登录dockerhub网站,找到提交的镜像

方法二:删除本地的镜像,重新拉去dockerhub上新提交的镜像

  1. dockerfile

dockerhub与github关联,dockerhub自动克隆gihhub上的仓库并自动构建镜像

  1. 搭建私有dockerhub

registry: https://hub.docker.com/_/registry


centos7 yum 卸载已安装的docker centos7删除docker_docker 删除镜像_10


step1:找一台服务器启动registry

docker run -d -p 5000:5000 --restart always --name registry registry:2

step2:本地打包镜像 docker build -t ip:5000/imagename[:tag]

注意: 必须是registry所在服务器的ip:5000/imagename:tag

step3:编辑/etc/docker/daemon.json

添加内容: {"insecure-registries":["registry-ip:5000"]}

step4:编辑 /lib/systemd/system/docker.service

添加内容:


centos7 yum 卸载已安装的docker centos7删除docker_docker java镜像_11


step5:重启docker

sudo systemctl restart docker

step6: docker push rgistry-ip:5000/imagename

验证:

https://docs.docker.com/registry/spec/api/