菜鸟教程:Docker 容器使用 | 菜鸟教程
0手动启动docker(centos7):
systemctl start docker
systemctl status docker
#手动安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl status docker
systemctl start docker
systemctl status docker
1 一键安装docker脚本
#!/bin/bash
#判断命令是否执行成功
successOf(){
if [ $? -ne 0 ];
then
echo "faild"
return
else
echo " "
return 1
fi
}
echo "正在执行安装程序"
#创建或清空dockerWithPortainerSetup.log
echo > dockerSetup.log
#安装需要的软件包 yum-util 提供yum-config-manager功能
yum install -y yum-utils device-mapper-persistDepotent-data lvm2 >> dockerSetup.log
successOf
echo "---------------->yum-config-manager依赖执行成功<------------------"
#设置docker的阿里仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo >> dockerSetup.log
successOf
echo "---------------->设置Docker的阿里仓库成功<------------------"
#查看docker版本,选择特定版本安装
yum list docker-ce --showduplicates | sort -r >> dockerSetup.log
successOf
echo "---------------->选择特定版本安装,默认Docker-ce-18.03.1.ce<------------------"
#安装docker 默认的是docker-ce-18.03.1
yum install docker-ce-18.03.1.ce -y >> dockerSetup.log
successOf
echo "---------------->Docker-ce-18.03.1安装成功<------------------"
#启动docker
systemctl start docker >> dockerSetup.log
successOf
echo "---------------->Docker安装成功<------------------"
#加入开机自启动
systemctl enable docker >> dockerSetup.log
successOf
#查看docker版本
docker version
successOf
#安装成功
echo "恭喜你,安装成功"
列出docker 安装包:
rpm -qa |grep docker
卸载DOCKER服务:
yum remove docker-ce(版本号)
再查找docker文件,找到了就删除。eg:rm -rf /var/lib/docker
2 从docker官方仓库中拉取镜像:
docker image pull :
eg:docker image pull ubuntu:latest
删除镜像:
docker image rm 或者docker rm -rf xxxx
运行docker出错,查看docker的启动日志:
journalctl -u docker.service
2.1 列出镜像
docker images(docker image ls)
2.2 为镜像添加标签
docker tag centos:latest mycentos:latest
会创建一个ID一摸一样,标签不一样的docker镜像
2.3 docker inspect 获取镜像的详细信息
docker inspect 镜像名
2.4删除镜像
docker rmi 镜像名:标签
有多个标签只是删除了这个标签而已,镜像文件任然在。只有一个标签的话 就是删除了这个镜像文件。
同一镜像文件,多个标签,强行删除的话 使用:docker rmi -f xxx参数
3创建镜像
3.1 基于已有镜像的容器创建新的镜像
docker commit命令docker commit
eg:docker commit -m “add a new file” -a “ma” 1159e9859a21(容器ID) cetnos:latest
会创建一个基于1159e9859a21 新的镜像
3.2基于本地模板导入镜像
docker import xx.tar 容器名
3.3存出和载入镜像(docker save docker load)
存出:dokcer save -o xx.tar centos:latestsave
载入:docker load --input xxx.tarload
上传镜像到docker hub
push前先修改标签:docker tag openjdk:latest mw123a456/myregistory:latest
然后再push:docker push mw123a456/myregistory:latest
注:mw123a456这是docker hub的账号名 ,myregistory这是仓库名
3.4 dockerfile创建镜像
FROM centos:7
#RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
MAINTAINER ma<1359634214@qq.com>
ENV MYPATH /MNT
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end--"
CMD /bin/bash
dockerfile
dockerfile 的命令摘要
FROM- 镜像从那里来
MAINTAINER- 镜像维护者信息
RUN- 构建镜像执行的命令,每一次RUN都会构建一层
CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
VOLUME- 定义数据卷,如果没有定义则使用默认
USER- 指定后续执行的用户组和用户
WORKDIR- 切换当前执行的工作目录
HEALTHCHECH- 健康检测指令
ARG- 变量属性值,但不在容器内部起作用
EXPOSE- 暴露端口
ENV- 变量属性值,容器内部也会起作用
ADD- 添加文件,如果是压缩文件也解压
COPY- 添加文件,以复制的形式
ENTRYPOINT- 容器进入时执行的命令
4容器
4.1 导出容器
docker export -o xx.tar 容器IDexport
4.2导入容器
docker import xxx.tar centos:latest
4.3 进入docker容器:(exec进入容器,退出时,容器不会停止)
docker exec -it xxx /bin/bash
查看docker容器的运行日志
docker logs -f --tail 1000 xxx
查看docker容器的基本信息
docker inspect xx
删除容器
docker rm -f name/id
4.4创建容器指定数据卷(-V)和指定容器与主机映射的端口
docker run -d -p 8971:8971 --name KD-auth \
--log-opt max-size=50m --log-opt max-file=3 \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-e JAVA_OPTS='-Dfile.encoding=UTF8' -e TZ='GMT+8' \
-v /mnt/apps/new_xxt/app:/app \
-v /mnt/apps/new_xxt/app/log:/log \
openjdk:8-jdk-alpine \
java -jar /app/xxt-auth-0.0.1-SNAPSHOT.jar --spring.cloud.config.uri=http://172.16.100.40:8001
-d是后台运行,-p是主机的8971映射到容器的8971端口,-v是指定主机的数据卷与容器内的目录互通
也可以映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:500 centos:latest
DockerFile
FROM:基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露出的端口号
WORKDIR:指定在创建容器后,终端默认登录的进来工作目录
ENV:用来在构建镜像过程中设置环境变量,比如:ENV TEMP_DIR /usr/local,那么在调用该环境变量时,就是$TEMP_DIR
ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
COPY 源文件路径 目标文件路径
COPY [“源路径”,”目标路径”]
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
Shell格式:cmd <命令>
exec格式:CMD [“参数1”,”参数2”,”参数3”,…]
ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子类继承后父镜像的onbuild被触发
dockerfile示例
用dockerfile创建一个 tomcat镜像 并启动
FROM centos
MAINTAINER MLW
ADD jdk-20.0.2_linux-x64_bin.tar.gz /usr/local
ADD apache-tomcat-9.0.80.tar.gz /usr/local
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-20.0.2
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.80/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.80/logs/catalina.out
然后 docker build -f dockerfile -t tomcat:1 .
然后docker run -d -p 8080:8080 --name mytomcat tomcat:1