定义
docker : 解决运行环境和配置软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
docker —help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
-
常用命令:
(镜像命令)
image
docker image :docker 中的镜像
-
-a : 列出本地所有镜像
-
-q :只显示镜像ID
-
—digests :显示镜像的摘要信息
-
—no-trunc :显示完整的镜像
search
docker search tomcat
pull
docker pull tomcat 等价于 docker pull tomcat:latest 拉取最新版本
rmi
docker rmi hello-world 等价于 docker rmi hello-world:latest 删除镜像
docker rmi -f hello-world 强制删除
docker rmi -f hello nginx 批量删除
docker rmi -f $(docker image -qa) 组合命令 删除所有镜像
(容器命令)
-
新建启动容器
docker run -it “id”
-
列出当前所有正在运行的容器
docker ps
-l :运行过的容器
-n 3 : 上3次运行过的
-lq : 显示 所有运行过的 容器的 ID
-
退出容器
exit : 关闭退出
ctrl + P + Q :关闭不退出
-
启动容器
docker start “ID”
-
重启容器
docker restart “ID”
-
停止容器
docker stop “ID"
-
强制停止容器
docker kill “ID"
-
删除已停止的容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
-
启动守护是容器
-
docker -run -d centos : 启动之后就会自动停止
-
docker -run -d centos /bin/sh -c “while true;do echo hello yhw; sleep 2; done"
-
-
查看容器中的日志
-
docker logs “id”
-
-t :加入时间戳
-
-f :跟随最新的日志打印
-
—tail 数字 :显示最后几条记录
-
-
例如 docker logs "id" -t -f —tail 5 : 实时的查看最新的5行记录
-
-
查看容器内运行的进程
-
docker top “ID”
-
-
查看容器内的运行细节
-
docker inspect “容器ID”
-
-
进入正在运行的容器并以命令行交互
-
docker exec -it “容器ID” bashShell 例子:docker exec -it “ID” ls -l
-
docker attach “容器ID"
-
两者区别 : exec 是不进入容器 操作容器,不启动新的进程, attach 是进入容器操作
-
-
从容器内拷贝文件到主机
-
docker cp “ID:path targetPath” 例子:docker cp 739d404cc923:/tmp/yang.log ~/
-
Docker 镜像(补充命令)
定义:联合文件系统(层层叠加)
-
docker run -it -p 8080:8080 tomcat
-
-p 主机端口:docker容器端口
-
-P 随机分配端口
-
i 交互
-
t 终端
-
-
docker commit -a=“author” -m=“update msg” “ID” tomcatNew/mytomcat:1.2
Docker 容器数据卷
定义:持久化 和 数据共享
容器的添加
-
命令添加
-
docker run -it -v /mydata:/mydata1 centos(镜像名) 实现本地宿主机 mydata 目录与 centos mydata1 的文件共享
-
docker run -it -v /mydata:/mydata1 :ro centos 只读共享
-
如果没有写权限, 可以添加命令 — privileged=true
-
-
DockerFile 添加
-
编写可执行的 脚本
-
# volume test
FROM centos
VOLUME ["/dataVC1","/dataVC2"]
CMD echo "finished,-----success"
CMD /bin/sh
# 用 build 执行完成之后会给 dataVC1 dataVC2 在 宿主机上自动的 分配 地址
-
build 生成镜像
-
docker build -f ~/mydocker/Dockerfile -t yhw/centos . —— -f:指定构建文件 -t 跟镜像名称 . 是在当前路径下
-
上边的命令, 如果构建的文件是 Dockerfile 的话, -f 可以省略,
-
—volumes-from “镜像名” # 链式挂载分区, 父子之间共享,以及传递,即便父被删除,自也会实现共享
-
docker run -it —name doc01 yhw/centos
-
docker run -it —name doc02 —volumes-from doc01 yhw/centos 复用 doc01中挂载的 dataVC1 dataVC2 目录
-
( DockerFile ) CMD 与 ENTRYPOINT 区别
CMD 多个命令时,是命令被覆盖,
ENTRYPOINT 是追加命令!
例子
FROM centos
RUN yum install curl
CMD [“curl”,“-s”,”http://ip.cn”]
#打包以上命令
docker build -f “path” mydoc01
# 可以正确执行
docker run -it mydoc01
# 会报错 由于CMD命令会覆盖,此时命令相当于 CMD -i, 如果想正确执行:docker run -it mydoc01 curl -s -i http://ip.cn
docker run -it mydoc01 -i
FROM centos
RUN yum install curl
ENTRYPOINT [“curl”,“-s”,”http://ip.cn”]
#打包以上命令
docker build -f “path” mydoc02
# 可以正确执行
docker run -it mydoc01
# 也可以正确的打印出头信息, ENTRYPOINT 命令是追加的
docker run -it mydoc01 -i
( DockerFile ) ADD、COPY
-
copy : 从宿主机拷贝文件到镜像
-
add : 添加并解压
DockerFile 示例(自定义 tomcat9)
FROM centos
MAINTAINER yhw
# 从宿主机拷贝文件到容器/usr/local/路径下
COPY mmm.txt /usr/loccal/cincontainer.txt
# 将java,tomcat 添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat=9.0.8.tar,gz /usr/local/
# 安装 vim
RUN yum install vim
# 设置工作访问时的 workdir路径,登录的落脚点
ENV mypath /usr/local
WORKDIR $mypath
# 配置 java tomcat 环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0.171
ENV CLASSPATH $JAVA_HOME/LIB/dt.jar:$JAVA_HOME/lib/tool.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器运行的监听端口
expose 8080
# 启动 tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh", "run"]
cmd /usr/local/apache-tomcaat-9.0.8/bin/startup.sh && tail -f /usr/local/apace-tomcat-9.0.8/bin/logs/catalina.out
构建命令( 如果是 Dockerfile 文件,可以省略 -f 指定文件的操作)
docker build -t yhwtomcat9
启动命名:
docker run -d -p 9080:8080 —name myt9
# 挂载 分区卷
-v ~/mr_yang/mydockerfile/tomcat/test:/usr/local/apache-tomacat-9.0.8/test
-v ~/mr_yang/mydockerfile/tomcat/logs/:/usr/local/apache-tomcat-9.0.8/logs
# 防止没有写权限
—-privileged=true
# 要启动的镜像名称
yhwtomcat9
验证:
docker image
docker ps
docker exec “ID” ls -l
docker exec “ID” java -version