Docker——安装、常用命令、生成镜像(Dockerfile)
1. Docker 安装
- 切换到root用户
$ su - root
- 安装yum工具
$ yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加yum阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 查看yum源
cat /etc/yum.repos.d/docker-ce.repo
yum makecache fast
yum list | grep docker
- 安装社区版Docker
$ yum -y install docker-ce
- 启动/关闭 Docker
systemctl start docker
systemctl stop docker
systemctl restart docker
- 查看Docker版本
$ docker version
- 配置阿里云的Docker镜像加速仓库
- 登录阿里云
- 进入控制台,搜索 容器镜像服务
- 找到 镜像加速器,此处有自己的 加速器地址
- 可以直接按阿里给出的命令执行,如下
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://加速地址.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
- 测试运行 HelloWorld
$ docker run hello-world
- 添加普通用户到docker用户组(可以让普通用户也能使用docker)
sudo groupadd docker
sudo gpasswd -a jerry docker
sudo systemctl restart docker
2. Docker 常用命令
2.1 基础信息类
docker version
docker info
docker 回车
docker 命令 --help
2.2 镜像-基础命令
docker images
docker search tomcat
docker pull tomcat
docker rmi hello-world
docker run -it 470671670cac(镜像ID)
$ exit (退出并停止)
Ctrl + P + Q (退出)
2.3 容器-基础命令
docker ps (正在运行的容器)
docker ps -n3 (前面运行的3个容器)
docker start 3ffbb477b4e2(容器ID)
docker restart 3ffbb477b4e2(容器ID)
docker stop 3ffbb477b4e2(容器ID)
docker kill 0b1263947889(容器ID)
docker rm 0b1263947889(容器ID)
docker rm $(docker ps -qa | tail -3) 删除最后3个容器
docker attach 9e12d1175d04(容器ID)
docker run -d centos
docker logs a389c769edd1(容器ID)
docker logs -t a389c769edd1(容器ID) 显示时间
docker logs -f a389c769edd1(容器ID) 不停的追加
docker logs -t -f --tail 3 a389c769edd1(容器ID)
docker top a389c769edd1(容器ID)
docker inspect a389c769edd1(容器ID)
docker exec -t 9e12d1175d04 ls -l /tmp
docker exec -t 9e12d1175d04 /bin/bash
2.4 容器与宿主机(拷贝、端口映射、路径映射)
docker cp 容器ID:容器文件路径 宿主机路径
docker cp 9e12d1175d04:/tmp/test.txt ./
docker run -d -p 8099:8080 --name my_tomcat tomcat
docker run -d -p 8099:8080 -v /opt/docker_file_map/
tomcat/webapps:/usr/local/tomcat/webapps --name
my_tomcat tomcat
docker exec -it 9e12d1175d04 /bin/bash
3. 生成镜像
3.1 Commit 方式
docker commit -a="作者名" -m="描述" 容器ID 包/名称:版本
docker commit -a="test_author" -m="tomcat test hello" b6c1ff931ffc skey/mytomcat:1.1
docker run -d -p 23333:8080 skey/mytomcat:1.1
3.2 Dockerfile 方式
- 基本步骤
docker build -t hello:v1.0 .
docker images | grep hello
docker run -d -p 23333:8080 hello:v1.0
docker save hello -o hello.tar
docker load -i hello.tar
- Dockerfile-语法
# FROM 是继承哪一个镜像
FROM java:8
# 作者和邮箱
MAINTAINER jerry<jerry2020@gmail.com>
# ENV 是配置环境变量
ENV mypath=/usr/local
# WORKDIR 是工作目录,进入该镜像时会到该目录
WORKDIR $mypath
# ADD 添加并解压
ADD test.zip /
# COPY 是只添加
# 挂载容器的的路径
VOLUME ["/data01", "/data02"]
# 对外暴露的端口
EXPOSE 8080
# RUN 运行shell命令
RUN ls /
# CMD 容器启动时运行,运行shell命令,重复多个CMD时,只有
最后一个生效
# 并且会被`docker run 镜像ID`后面的命令会替换
CMD /bin/bash
# ENTRYPOINT 不会被替换,而是追加后面的参数
ENTRYPOINT /bin/bash
- Dockerfile-示例
FROM centos
# 作者和邮箱
MAINTAINER jerry<jerry2020@gmail.com>
# 挂载容器的的路径
# 会自动与主机某个路径对应,需利用`docker inspect 容器ID`查看路径
VOLUME ["/data01", "/data02"]
CMD echo "finished ------ success"
# 默认命令,容器启动时运行,只有最后一个CMD有效,并且会被docker run 后面的命令替换
CMD /bin/bash
# FROM 继承自镜像java:8
FROM java:8
# ENV 配置环境变量
ENV LANG C.UTF-8
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Dspring.config.location=/hello/application.properties"
# RUN 运行Linux命令
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD hello.zip .
RUN unzip hello.zip
RUN chmod +x /hello/bin/start.sh
RUN chmod +x /hello/bin/stop.sh
# CMD 容器启动时运行,运行Linux命令
CMD cd /hello/bin/&&./start.sh
- Dockerfile-实践(做一个Java、Scala、Maven开发环境)
- 选择一个目录,在该目录下准备好安装包,如下
jdk-8u231-linux-x64.tar.gz
scala-2.11.12.tgz
apache-maven-3.6.3-bin.tar.gz
- 在当前目录下编辑Dockerfile
$ vim Dockerfile
FROM centos:7
MAINTAINER my_name<my_mail@gmail.com>
# 解压宿主机的jdk、scala、maven到容器内
ADD jdk-8u231-linux-x64.tar.gz /usr/local
ADD scala-2.11.12.tgz /usr/local
ADD apache-maven-3.6.3-bin.tar.gz /usr/local
# 安装vim,下载有点慢
RUN yum -y install vim
# 配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV SCALA_HOME /usr/local/scala-2.11.12/
ENV MAVEN_HOME /usr/local/apache-maven-3.6.3
ENV PATH $PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$MAVEN_HOME/bin
# 暴露端口,不需要
# EXPOSE 8080
# 工作目录
WORKDIR /usr/local/
# 运行
CMD java -version && scala -version && mvn -version && /bin/bash
- 命令1 - 生成镜像
$ docker build -t my_java_scala_env:1.0 .
- 命令2 - 运行镜像
$ docker run -it my_java_scala_env:1.0
- 命令3 - 导出镜像
$ docker save my_java_scala_env:1.0 -o my_java_scala_env_1.0.tar
- 复制到到其他服务器
- 命令4 - 加载镜像
$ docker load -i my_java_scala_env_1.0.tar