Docker基本知识

Docker常用命令

镜像:

docker search [镜像名]     # 示例: docker search redis # 搜索redis的镜像
docker pull [镜像名]:[版本号]     # 示例: docker pull redis:3.2 # 下载redis3.2版本的镜像,如果版本号没写,则默认latest,也就是最新版本
​
docker images       # 列出当前镜像
docker images -a    # 列出所有的镜像
docker images -q    # 列出当前所有镜像的 镜像ID
docker images -aq   # 列出所有镜像的 镜像ID
​
docker rmi [镜像ID/镜像名]       # 删除镜像
docker rmi -f [镜像ID/镜像名]    # -f表示强制删除镜像
docker rmi -f $(docker images -aq)  # 慎用,删除所有的镜像,$()表示一个范围,类似sql中的in

容器(第一节):

docker ps   # 查看当前正在运行的docker容器
docker ps -a    # 查看所有的docker容器,包括关闭的
docker ps -q    # 只查看docker容器的容器id
​
docker run [options] [镜像ID/镜像名]  # 启动容器
docker run -it redis                # 以后台形式启动redis并开启一个默认交互控制台
docker run -it --name MyRedis redis # 跟上一条一样的模式启动redis容器,并将容器命名为MyRedis
​
# 特别说明:以上方式可直接启动时进入容器,退出容器有两种方式:
exit        # 直接关闭容器并退出
ctrl+p+q    # 不关闭容器直接退出
​
docker stop [容器id/容器名]      # 正常停止容器运行
docker kill [容器id/容器名]      # 强制终止容器运行
docker start [容器id/容器名]     # 启动已经停止的容器
docker restart [容器id/容器名]   # 重新启动容器
​
docker rm [容器id/容器名]             # 删除已停止的容器
docker rm -f [容器id/容器名]          # 强制删除容器(包括在运行的容器)
docker rm -f $(docker ps -aq)       # 慎用,强制删除所有容器
docker ps -aq | xargs docker rm -f  # 同上,慎用,强制删除所有容器

容器(第二节)

docker inspect [容器id/容器名]   # 以json方式打印容器详细信息
docker run -d [镜像id/镜像名]    # 后台运行容器,注:如果只后台启动并且没有tail -f/less 类似的阻塞进程的话,这样后台启动之后会立刻关闭,docker ps会查看不到这个容器,因为docker机制是没有前台进程、后台进程秒关闭。
docker logs -t -f --tail [日志行数] [容器id/容器名]      # 查看日志,-t代表带上时间,-f表示以尾部刷新的方式查看日志,--tail 3代表查看最后3行日志
​
docker attach [容器id/容器名]                # 进入容器,到达容器内交互控制台
docker exec -it [容器id/容器名] [command...] # 进入容器并执行command中的命令,最后可自动返回宿主机界面,举例如下:
docker exec -it [容器id/容器名] ls       # 在宿主机交互界面 打印出 容器内初始化路径的ls的结果
docker exec -it [容器id/容器名] ps -ef   # 在宿主机交互界面 打印出 容器内运行的所有进程
### 注:attach和exec的区别在于:attach直接进入容器的命令行,不启动新进程;exec在容器中打开新的终端,并可以启动新进程
​
docker top [容器id/容器名]   # 查看容器内运行的进程
docker cp [容器id/容器名]:[容器中的文件路径] [宿主机的文件路径]      # 将容器内的文件拷贝到宿主机上
​
# 根据容器实例的配置打包镜像
docker commit -m="提交的描述信息" -a="作者" [容器id/容器名] [镜像名]:[版本TAG]     # 将容器打包成镜像

 

docker宿主机与容器内共享文件

(1)docker 容器内外文件共享:

docker run -it -v [宿主机路径]:[容器内路径]:[读写模式,若没有代表可读可写]  [镜像名/镜像ID]
# 举例:
docker run -it -v /hostdir:/containerdir:ro centos  # 运行镜像为centos的容器,并将宿主机路径/hostdir和容器内路径/containerdir关联起来,容器内的路径(文件)只读(ro=read only)

(2)使用 dockerfile 共享容器内外文件

Dockerfile内容如下:

# dockerfile
FROM centos
VOLUME ["/data1", "/data2"]
CMD echo "---- finish, success ----"
CMD /bin/bash

然后使用以上dockerfile构建镜像:

docker build -f [dockerfile的目录] -t yancy/centos .    # .代表当前目录下,如果dockerfile文件名称是Dockerfile并且在当前目录,则可以不用( -f [dockerfile的目录] )选项参数

 

dockers数据卷容器(docker容器与容器间共享文件)

某容器挂载的数据卷,其他容器通过挂载这个(父容器)数据卷实现数据共享,挂载数据卷的容器,称为数据卷容器。其实重点是实现容器与容器之间的数据共享。注:数据卷都挂载完之后,一个容器修改卷内数据,共享这个数据卷的其余容器内数据都会同步。

命令如下:

docker run -it --volumes-from [容器ID/容器名] [镜像ID/镜像名]

 

 

Dockerfile重点知识

Dockerfile1内容如下:

# 基础镜像
FROM centos
# 作者信息
MAINTAINER Yancy_xerxes 
​
# 定义一个变量mypath
ENV mypath /usr/local
# 定义容器启动后命令行所在路径 
WORKDIR $mypath         
​
# 定义容器启动后自动运行的命令
RUN yum -y install vim  
​
# 暴露端口80
EXPOSE 80               
​
# CMD执行命令,不过每条CMD都会被下一条CMD覆盖
CMD echo "我的工作路径:"$mypath        
CMD /bin/bash

 

Dockerfile2内容如下:

#### 此dockerfile用来构建一个自定义的tomcat镜像 ####
​
FROM centos
MAINTAINER Yancy X
​
# 把宿主机当前上下文的c.txt 拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cInContainer.txt
​
# 把Java和Tomcat添加到容器中/usr/local/路径下
ADD jdk-8u241-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.31.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_241
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.31
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.31
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
​
# 容器运行时开放的端口
EXPOSE 8080
​
# 启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.31/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.31/bin/catalina.sh", "run"]
CMD /usr/local/apache-tomcat-9.0.31/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.31/logs/catalina.out

 

其它:

以下分别是启动mysql和redis容器的例子:

# 启动mysql的docker容器的命令(较为复杂),指定初始化密码为123456
docker run -p 3307:3306 --name mysql \
-v /root/yancymysql/conf:/etc/mysql/conf.d \
-v /root/yancymysql/logs:/logs \
-v /root/yancymysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
​
#启动redis的docker容器命令,带有appendonly(AOF持久化)
docker run -p 6379:6379 \
-v /zzyyuse/myredis/data:/data \
-v /zzyyuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf  \
-d redis:3.2 \
redis-server /usr/local/etc/redis/redis.conf --appendonly yes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值