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命令
(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官网地址
2.配置DaoCloud
2.1 shell下执行命令:
curl -sSL
2.2 执行完上述命令后,多了个逗号,打开/etc/docker/daemon.json文件,去掉“,”;
2.3重启docker
sudo systemctl restart docker
四、镜像
1.在线安装镜像
从dockerhub上搜索镜像并在线安装。
dockerhub地址: /
在线 安装镜像,不需要注册
推送自己的镜像到dockerhub,需要注册用户
案例:在线安装java镜像
step1: 搜索java镜像
docker search java
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
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脚本执行
CMD
设置容器启动后默认执行的命令和参数如果docker run指定了其它命令,CMD命令会被忽略如果定义了多个CMD,只有最后一个会执行ENTRYPOINT
设置容器启动时运行的命令让容器以应用程序或者服务的形式运行不会被忽略,一定会执行3.3Dockerfile学习资料
Dockerfile在github上的代码库
/
Dockerfile reference
/
五、容器
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
step4: docker commit jovial_mcnulty gy/centos-vim
方法二、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安装到临时容器中,最后将临时容器转成新的镜像同时临时容器被删除
六、镜像发布
镜像上传到dockerhub注意点:镜像名字: dockerhub-用户名/镜像名称,否则出现无权限提示
step1:docker login
登录dockerhub
step2: docker push imagename
step3: 验证:
方法一:登录dockerhub网站,找到提交的镜像
方法二:删除本地的镜像,重新拉去dockerhub上新提交的镜像
dockerfiledockerhub与github关联,dockerhub自动克隆gihhub上的仓库并自动构建镜像
搭建私有dockerhubregistry:
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
添加内容:
step5:重启docker
sudo systemctl restart docker
step6: docker push rgistry-ip:5000/imagename
验证:
/