sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io
3.测试docker
sudo docker run hello-world
换源后加速明显:
【参照博主的另一篇博客】
docker version #docker 版本信息
docker info #docker 详细信息
docker --help #docker
docker images [option] #列出本机上的所有镜像
#显示结果的表头含义如下
#RESPITORY 镜像的仓库源
#TAG 镜像的标签【统一仓库源可以有多个TAG,用于规定不同版本】
#IMAGE ID 镜像
#CREARED 镜像的创建时间
#SIZE 镜像大小
# option:
# -a 列出本地所有的镜像(包含中间映像层)
# -q 只显示镜像ID
# --digests 显示镜像的摘要信息
# --no-trunc 显示完整的镜像信息
docker search [options] <imageName> #在远程库搜索镜像
#option
# --no-trunc 显示完整的镜像描述
# -s<number> 列出收藏不小于number的镜像
# --automated 只列出 automated build类型的镜像
docker pull <imageName>[:TAG] #从远程库获取指定镜像,添加版本则获取指定版本,不添加则获取最新版
docker rmi -f <Image> #删除指定镜像ID的镜像
docker rmi -f <Image1:TAG> <Image2:TAG> #删除多个
docker commit -m="commitInfo" -a="author" <containerID> <要创建的目标镜像名>:[标签名]
docker run [options] <image> [command] [arg...] #新建并启动容器
# options 说明
# --name=名字 :为容器指定一个名称
# -d 后台运行,并返回容器ID,也即启动守护式容器
# -i 以交互模式运行容器
# -t 为容器重新分配一个伪输入终端,通常与 -i 一起使用
# -P 随机端口映射
# -p 指定端口映射
# 演示:
docker run -it -p 80:8080 tomcat # 创建Tomcat容器并启动,同时将宿主机的80端口映射给容器8080端口
docker ps [options]
# options
# -a 列出当前所有正在运行的+历史上运行过的容器
# -l 列出最近所创建的容器
# -n<number> 显示最近number个创建的容器
# -q 只显示容器编号
exit #容器停止并退出
ctrl+P+Q #容器不停止退出
docker start <containerID_OR_containerName> #启动容器
docker restart <containerID_OR_containerName> #重启容器
docker stop <containerID_OR_containerName> #停止容器
docker kill <containerID_OR_containerName> #强制关闭容器
docker logs [options] <containerId>
# options
# -t 加入时间戳
# -f 跟随最新的日志打印
# --tail <number> 显示
docker top <container> #显示当前容器内部进程
docker exec -it <containerID> <COMMAND>
docker attach <containerID>
docker cp <containerID>:<containerLoacation> <hostLocation>
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器。卷的设计目的就是数据的持久化,完全独立于容器的生命周期,因此docker不会再容器删除时删除其挂载的数据卷。
特点:
docker run -it -v <hostLocation>:<containerLocation> <imagesName> #可读写
docker run -it -v <hostLocation>:<containerLocation>:ro <imageName> #只读
类比一下
JavaEE Hello.java ----> Hello.class
Docker images ----> DockerFile
Docker File 就是对docker镜像的描述文件。
1.每条保留字指令都必须为大写字母后面且后面要跟随至少一个参数
2.指令按照从上到下,顺序执行
3.#标识注释
4.每条指令都会创建一个新的镜像层,并对镜像进行提交
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit 的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到所有指令都执行完成
FROM
基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建需要运行的命令
EXPOSE
当前容器对外暴露的端口
WORKDIR
指定在创建容器后,终端默认登录的工作目录
ENV
用来构建镜像过程中设置环境变量
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY
类似ADD,拷贝文件和目录到镜像中。<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD命令,会被run
之后的命令覆盖。
ENTRYPOINT
指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,不会被run
之后的命令覆盖。
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后发镜像的onbuild会被触发
示例:
1.编写dockerFile
#volume test
FROM centos
VOLUME
CMD echo "finished,------success"
CMD /bin/bash
#翻译成上面的容器数据卷
#docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash
2.使用build 编译dockerFile
docker buiild -f /mydocker/DockerFile -t binxer/centos . #结尾有 .
以上一步新建的镜像为模板运行容器dc01/dc02/dc03
docker run -it --name dc01 binxer/centos #创建dc01 作为父容器
docker -it --name dc02 --volumes-from dc01 binxer/centos #创建dc02 链接dc01
docker -it --name dc03 --volumes-from dc01 binxer/centos #创建dc03 链接dc01
此时删除 dc01 数据卷也不会消失,因为数据卷的生命周期一直持续到没有容器使用它为止。
自定义mycentos
使我们自己的镜像具备如下:
1.支持vim编辑器
2.支持ifconfig
命令
FROM centos
MAINTAINER test@abc.com
ENV mypath /user/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success-----------ok"
CMD /bin/bash
执行构建命令
docker build -t 新镜像名字:TAG .# 需要注意,结尾有 .
1.mkdir -p /mydockerfile/tomcat9
2.在上述目录下 touch c.txt
3.将jdk和tomcat安装的压缩包拷贝进上一步目录apache-tomcat-9.0.37-deployer.tar.gz
jdk-8u261-linux-x64.tar.gz
FROM centos
MAINTAINER bin0234<bin0234@foxmail.com>
# 把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
# 把java与tomcat添加到容器中
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/
# 安装vim
RUN yum -y install vim
# 设置工作访问的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/75
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器运行时监听的端口
EXPOSE 8080
# 启动运行时tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.37/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.37/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
build
命令docker build -t mytomcat9 .
run
命令,并添加数据卷映射webapps和logsdocker run -d -p 80:8080 --name mycat9 -v /mydockerfile/mytomcat9/webapps:/usr/local/apache-tomcat-9.0.37/webapps -v /mydockerfile/mytomcat9/logs:/usr/local/apache-tomcat-9.0.37/logs --privileged=true mytomcat9
docker search tomcat
docker pull tomcat
docker run -it -p 80:8080 tomcat
docker search mysql
docker pull mysql:5.7 #拉取一个5.7版本的mysql
docker run -p 1234:3306 --name mysql -v /hostLocation/mysql/conf:/etc/mysql/conf.d -v /hostLocation/mysql/logs:/logs -v /hostLocation/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234556 -d mysql:5.7
# 命令说明
# -p 1234:3306 将主机1234端口映射到容器3306端口
# --name mysql 容器名字
# -v /hostLocation/mysql/conf:/etc/mysql/conf.d 将主机/hostLocation/mysql/conf/挂载到容器的/etc/mysql/conf.d
# -v /hostLocation/mysql/logs:/logs 将主机/hostLocation/mysql/logs 目录挂载到容器/logs
# -v /hostLocation/mysql/data:/var/lib/mysql 将主机/hostLocation/mysql/data 目录挂载到容器的/var/lib/mysql
# -e MYSQL_ROOT_PASSWOED=123456 初始化Root密码
# -d mysql:5.7 后台运行mysql5.6
docker exec -it MySQL运行成功后的容器ID /bin/bash
docker search redis
docker pull redis:3.2
docker run -p 6379:6379 -v /myredis/data:/data -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
$ sudo docker login --username=你的id registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/bin_playerground/study:[镜像版本号]
$ sudo docker login --username=你的id registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/bin_playerground/study:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/bin_playerground/study:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。