Docker简介及常用命令

Docker是一个使用Go语言开发的开源的软件容器虚拟化平台,它以容器的形式将应用程序及其所有的依赖打包到一个文件系统,其中包含运行时所需要的一切东西,确保在任何环境都可以运行。

Docker 对比虚拟机
虚拟机 Docker
创建步骤复杂 简单
占用资源多 占用资源极少
启动慢 更快的启动速度
更好的复用性
Docker3个重要概念
  • 仓库:用于存放镜像的地方
  • 镜像:Docker镜像用于创建容器,Docker镜像是Docker容器的源代码
  • 容器:基于镜像运行的虚拟实例,是一系列进程的集合

CentOS系统配置文件存放在/etc/sysconfig/docker。
Docker相关的本地资源存放在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像底层文件。
一般不推荐在同一个容器内运行多个应用进程。

Docker常用命令

docker *** --help                   帮助命令
docker images [-q]                  列出本机镜像,只列出镜像ID
docker image COMMAND [image id]     
    inspect                 查看指定镜像的详细信息
    history                 显示镜像历史信息
    build                   根据Dockerfile编译镜像
    pull                    从registry拉取镜像或仓库
    push                    推送镜像或仓库到registry
    rm                      删除一个或多个镜像
    tag                     打标签

docker search ***                   从Docker Hub仓库查找镜像

docker pull imageName[:TAG]         从仓库拉取镜像
docker rmi -f imageName             删除某个镜像,-f强制删除
docker rmi docker images -aq        批量删除所有镜像

docker ps [OPTIONS]                 列出正在运行的容器
    -a                      包括已停止的容器
    -q                      只列出容器ID

docker run [OPTIONS] imageMame      新建并运行容器
    --name:为容器指定一个别名,"--name tomcat"
    -d:后台运行(注意:Docker容器后台运行,就必须有一个前台进程,否则会自杀)
    -i:已交互模式运行容器
    -t:为容器重新分配一个伪输入终端
    -p:端口映射到宿主机,使外网能访问到该容器(-p 8888:8080 代表容器端口8080映射为宿主机端口8888)
    -P:随机端口映射
    -e:设置环境变量
    -v:挂载宿主主机文件目录到容器内部,(-v /宿主机绝对路径:/容器内路径)
        --volumes-from:挂载指定容器的数据卷进行共享,相当于继承的作用
    --link:连接某个容器
    
    docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done"
    
    exit                            容器停止退出
    ctrl+P+Q                        容器不停止退出
    
docker attach  containerName        重新进入容器终端
docker exec -it containerName /bin/bash
docker exec -t containerID COMMEND  不进入容器对容器执行命令,可以使用 && 拼接多个命令
    
docker logs -f -t --tail n containerID  查看容器日志
    -t:显示时间
    -f:实时打印
    --tail n:显示最后n行

docker top containerName            显示容器内运行的进程
docker inspect containerName        查看容器内部细节

docker logs containerName               查看容器输出的日志信息

docker cp containerName:容器路径 宿主机路径      拷贝容器内文件到宿主机

docker start containerName          启动容器
docker restart containerName        重启容器

docker stop containerName           停止容器
docker kill containerName           强制停止容器
docker rm containerName             删除容器,可使用docker rm $(docker ps -aq)删除所有


docker build [OPTIONS] PATH | URL | -       基于Dockerfile创建自定义镜像
    -f:Dockerfile名称,默认PATH/Dockerfile。不加-f,使用.代表当前路径
    -t:指定新镜像名称和可选的TAG。-t name:tag
        实例:docker build -t myCentos:1.0 .
    上下文路径|URL: 指定构建镜像的上下文的路径,构建镜像的过程中,可以且只可以引用上下文中的任何文件
    
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]    根据已修改的容器创建一个新的镜像
    -a:作者
    -m: 提交信息
运行容器基本步骤

1、拉取镜像,docker pull NAME[:TAG]
2、运行容器,docker run [OPTIONS] imageMame

基于Dockerfile文件创建镜像并运行容器基本步骤

1、在指定目录下创建Dockerfile文件
2、基于Dockerfile文件创建自定义镜像 docker build
3、以镜像为模板新建并运行容器 docker run

Dockerfile文件指令:对镜像自定义配置信息,每条指令构建一层
FROM                指定基于哪个基础镜像构建
MAINTAINER          镜像维护者的姓名邮箱
RUN                 容器构建时需要执行的命令行,用于创建用户,安装依赖等操作,多条命令使用 && 拼接
EXPOSE              暴露镜像所占用的端口,容器运行时所提供的服务端口
WORKDIR             指定工作目录,容器创建后,终端登录后进入的默认目录
ENV                 设置环境变量
COPY                将构建目录上下文中的文件或目录复制到镜像内 COPY ***.tar.gz /user/local
ADD                 同COPY,但可以解压tar压缩包,并可以指定通过网络URL下载
CMD                 容器启动时要执行的命令,只有最后一行CMD命令生效。容器运行时可以覆盖CMD参数值
ENTYPOINT           同CMD,指定容器中启动程序及参数。但这些参数不能被覆盖

将一台宿主机的docker环境迁移到另外一台宿主机

  • 停止Docker服务
  • 将整个docker存储文件复制到另外一台宿主机上
  • 调整另外一台宿主机的配置即可

Docker 常用容器安装

安装MySQL

  • 拉取镜像
docker pull mysql:5.6
  • 创建配置文件my.cnf
# 设置UTF-8,避免查询乱码
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 增加对emoji表情存储的支持
collation-server=utf8mb4_unicode-ci
character-set-server-utf8mb4
default_password_lifetime=0
# 将时区设置为东八区
default-time-zone='+8:00'
  • 启动容器
docker run --name mysqldb  -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=mysql \
-e MYSQL_USER=mysql \
-e MYSQL_PASSWORD=mysql \
-e LANG=C.UTF-8 \
-v /usr/local/mydaocker/mysql/logs:/logs \
-v /usr/local/mydaocker/mysql-dockerfile/conf.d/:/etc/mysql/conf.d \
-v /usr/local/mydaocker/mysql-dockerfile/data:/var/lib/mysql \
-v /usr/local/mydaocker/mysql-dockerfile/dumps:/var/lib/dumps\
-d mysql:5.6

进入MySQL容器:docker exec -it mysql /bin/bash
登录MySQL:mysql -uroot -p
创建database:create database db01;
选择database:use db01;
显示所有的库:show databases;

安装Redis

docker pull redis:3.2
docker run -p 6379:6379 -d \
 -v/usr/local/mydaocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
 -v /usr/local/mydaocker/redis/data:/data \
 redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

基于Dockerfile创建tomcat镜像示例

  • 指定目录下创建Dockerfile文件
FROM centos
#容器维护者信息
MAINTAINER yangxl<1234@qq.com>
#把宿主机当前上下文的文件拷贝到容器路径下
COPY hello.txt /usr/local/helloworld.txt
#把java与Tomcat添加到容器
ADD jdk-8u191-linux-x64.tar.gz /usr/local/java
ADD apache-tomcat-9.0.33.tar.gz /usr/local/tomcat
#安装vim 编辑器
RUN yum -y install vim
#设置工作目录,终端登录后默认路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_191
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
#容器运行时提供的服务端口
EXPOSE 8080
#启动容器时运行Tomcat
# ENTYPOINT ["/usr/local/tomcat/apache-tomcat-9.0.33/bin/startup.sh"]
CMD /usr/local/tomcat/apache-tomcat-9.0.33/bin/startup.sh && tail -F /usr/local/tomcat/apache-tomcat-9.0.33/bin/logs/catalina.out
  • 基于Dockerfile创建镜像
docker build -t mytomcat .
  • 运行容器
docker run -d -p 8989:8080 --name mytomcat -v /usr/local/mydaocker/tomcat/webapp/test:/usr/local/tomcat/apache-tomcat-9.0.33/webapp/test -v /usr/local/mydaocker/tomcat/logs:/usr/local/tomcat/apache-tomcat-9.0.33/logs mytomcat

安装GitLab

  • 查找镜像
docker search gitlab
  • 拉取镜像
docker pull gitlab/gitlab-ce
  • 创建挂载宿主主机文件目录
# 配置文件
mkdir -p /usr/local/dockerplace/gitlab/etc

# 数据文件
mkdir -p /usr/local/dockerplace/gitlab/log

# 日志文件
mkdir -p /usr/local/dockerplace/gitlab/data
  • 创建并启动容器
docker run --publish 8443:443 \
    --publish 8090:80 \
    --name gitlab \
    --privileged=true \
    --restart unless-stopped \
    -v /usr/local/dockerplace/gitlab/etc:/etc/gitlab \
    -v /usr/local/dockerplace/gitlab/log:/var/log/gitlab \
    -v /usr/local/dockerplace/gitlab/data:/var/opt/gitlab \
    -d gitlab/gitlab-ce:latest
  • 修改配置文件
    不修改配置文件,无法进行访问
    1、修改gitlab.rb
    修改 /usr/local/dockerplace/gitlab/etc/gitlab.rb 把external_url改成宿主机的域名或者IP地址


    1612171968(1).jpg

    2、修改gitlab.yml
    修改 /home/gitlab/data/gitlab-rails/etc/gitlab.yml,找到关键字 Web server settings ,将 host 的值改成映射的外部主机 ip 地址和端口


    1612173209(1).jpg
  • 重启一下 gitlab
docker restart gitlab
本地镜像发布到阿里云

1、登录阿里云,搜索容器镜像服务,找到镜像仓库
2、创建命名空间
3、创建镜像仓库,选择本地仓库,可通过命令行推送镜像到镜像仓库
4、将镜像推送到阿里云镜像仓库
5、将镜像推送到Registry

docker login --username=飞啊飞你的困难 registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/yangxl/my-mysql:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/yangxl/my-mysql:[镜像版本号]
从阿里云镜像仓库拉取镜像

1、登录阿里云Docker Registry

docker login --username=飞啊飞你的困难 registry.cn-beijing.aliyuncs.com

2.、从Registry中拉取镜像

docker pull registry.cn-beijing.aliyuncs.com/yangxl/repoName:[镜像版本号]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361