Docker的三大核心概念:镜像、容器、仓库

  • 镜像:类似虚拟机的镜像、用俗话说就是安装文件。
  • 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。
  • 仓库:类似代码仓库,是Docker集中存放镜像文件的场所。

1.设置docker自启动

使用yum安装好docker后,设置开机启动。

[root@CentOS ~]# systemctl enable docker

2.docker的启动、停止、重启

[root@localhost ~]# service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@localhost ~]# service docker stop
Redirecting to /bin/systemctl stop docker.service
[root@localhost ~]# service docker start
Redirecting to /bin/systemctl start docker.service

3.docker镜像

docker search <image>用于搜索线上镜像仓库,这样就可以搜索出在Docker Hub上所有带redis的公共的可用镜像。

[root@CentOS ~]# docker search redis
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/redis Redis is an open source key-value store th... 5472 [OK]
docker.io docker.io/bitnami/redis Bitnami Redis Docker Image 82 [OK]
docker.io docker.io/sameersbn/redis 68 [OK]
docker.io docker.io/tenstartups/redis-commander 32 [OK]
docker.io docker.io/hypriot/rpi-redis Raspberry Pi compatible redis image 31
docker.io docker.io/kubeguide/redis-master redis-master with "Hello World!" 25
docker.io docker.io/kubeguide/guestbook-redis-slave Guestbook redis slave 20
docker.io docker.io/redislabs/redis Clustered in-memory database engine compat... 15
docker.io docker.io/webhippie/redis Docker images for redis 9 [OK]
docker.io docker.io/arm32v7/redis Redis is an open source key-value store th... 7
docker.io docker.io/rediscommander/redis-commander Alpine image for redis-commander - Redis m... 7 [OK]
docker.io docker.io/oliver006/redis_exporter Prometheus Exporter for Redis Metrics. Su... 5
docker.io docker.io/rtoma/logspout-redis-logstash Logspout including Redis adapter for sendi... 5
docker.io docker.io/centos/redis-32-centos7 Redis in-memory data structure store, used... 3
docker.io docker.io/dynomitedb/redis Redis backend for DynomiteDB. 2 [OK]
...

docker pull <image>拉取服务器镜像仓库里的镜像。

[root@CentOS ~]# docker pull redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ...
latest: Pulling from docker.io/library/redis
be8881be8156: Pull complete
d6f5ea773ca3: Pull complete
735cc65c0db4: Pull complete
ff89c30e4d8c: Pull complete
59bf782a86b3: Pull complete
ce8aaa9fe90a: Pull complete
Digest: sha256:096cff9e6024603decb2915ea3e501c63c5bb241e1b56830a52acfd488873843
Status: Downloaded newer image for docker.io/redis:latest

不指定版本,默认会下载最新的一个版本。由于官方的镜像在国外,有时网速较慢,所以推荐下载国内的镜像,比如阿里云,网易云。

docker push 推送本地镜像到服务器。

查看镜像

docker images:列出images

docker images -a:列出所有的images(包含历史)

docker images --tree :显示镜像的所有层(layer)

docker rmi  <image ID>:删除一个或多个image

4.docker创建一个容器

上面介绍了docker镜像的拉取,我们接下来看下如何创建一个容器。

docker run 命令格式

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]  

  -d, --detach=false         指定容器运行于前台还是后台,默认为false
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
-u, --user="" 指定容器的用户
-a, --attach=[] 标准输入输出流和错误信息(必须是以非docker run -d启动的容器)
-w, --workdir="" 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[] 添加主机设备给容器,相当于设备直通
--dns=[] 指定容器的dns服务器
--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="" 覆盖image的入口点
--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
--link=[] 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge" 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no" 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

实例:

[root@CentOS ~]# docker run -p 8090:8080 -p 50000:50000 --restart always --link Redis:redis --name jenkins -v /home/jenkins:/home/jenkins_home --privileged=true dokcer.io/jenkins/jenkins

-p:把容器的8080端口映射到宿主机8090上

-v:主机的目录/home/jenkins映射到容器的目录/home/jenkins_home

--name:给容器起个名字jenkins,docker.io/jenkins/jenkins是你下载的镜像

--restart:always 容器退出时总是重启

  --privileged=true:挂载主机目录Docker访问出现Permission denied的解决办法

--link:为redis容器起个别名Redis,访问的时候使用别名Redis

5.查看docker容器

docker ps      #查看正在运行的容器

[root@CentOS ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
faa1b0be4e0b docker.io/jenkins/jenkins "/sbin/tini -- /us..." 15 hours ago Up 4 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins

docker ps -a   #查看所有容器

[root@CentOS ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45af2f4d1f82 docker.io/redis "docker-entrypoint..." 15 hours ago Exited (255) 3 minutes ago 0.0.0.0:6378->6379/tcp redis1
ffa152fb76cc docker.io/redis "docker-entrypoint..." 15 hours ago Exited (255) 3 minutes ago 0.0.0.0:6379->6379/tcp redis
faa1b0be4e0b docker.io/jenkins/jenkins "/sbin/tini -- /us..." 15 hours ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins

6.启动、停止、重启、删除docker容器

根据id和name对容器进行操作

#启动容器
docker start <ContainerId(或者name)>
#停止容器
docker stop <ContainerId(或者name)>
#重启容器
docker restart <ContainerId(或者name)>
#删除容器
docker rm <ContainerId(或者name)>
#删除所有容器
docker rm $(docker ps -a -q)

7.进入docker容器

#进入容器
docker exec -it containerID /bin/bash

ctrl+d 退出容器且关闭

ctrl+p+q 退出容器但不关闭

8.查看容器日志

docker logs -f -t --tail 行数 容器名

[root@CentOS ~]# docker logs -f -t --tail 10 redis #查看容器最后10行日志
2018-08-09T05:55:16.204504000Z 1:C 09 Aug 05:55:16.135 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2018-08-09T05:55:16.205232000Z 1:C 09 Aug 05:55:16.151 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=1, just started
2018-08-09T05:55:16.205822000Z 1:C 09 Aug 05:55:16.151 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
2018-08-09T05:55:16.206545000Z 1:M 09 Aug 05:55:16.199 * Running mode=standalone, port=6379.
2018-08-09T05:55:16.207152000Z 1:M 09 Aug 05:55:16.200 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2018-08-09T05:55:16.207713000Z 1:M 09 Aug 05:55:16.200 # Server initialized
2018-08-09T05:55:16.208315000Z 1:M 09 Aug 05:55:16.200 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
2018-08-09T05:55:16.209055000Z 1:M 09 Aug 05:55:16.201 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
2018-08-09T05:55:16.209806000Z 1:M 09 Aug 05:55:16.201 * DB loaded from disk: 0.000 seconds
2018-08-09T05:55:16.210405000Z 1:M 09 Aug 05:55:16.202 * Ready to accept connections

9.Docker网络操作

#在主机上创建一个网络
docker network create mynet #查看自定义bridge网络
docker network inspect mynet #移除网络要求网络中所有的容器关闭或断开与此网络的连接时,才能够使用移除命令
docker network disconnet mynet 容器ID #移除网络
docker network rm mynet

10.Docker拷贝操作

宿主机和容器之间的拷贝操作使用 docker cp 命令,并且无论容器是否启动都生效

# 1.文件从宿主机拷贝到容器:    docker cp 宿主机文件路径   容器名:存放路径
docker cp /home/jenkins/test.txt jenkins:/var/jenkins_home # 2.文件从容器拷贝到宿主机 docker cp 容器名:要拷贝的文件路径  宿主机存放路径  
docker cp jenkins:/var/jenkins_home/test.txt /home/jenkins

Linux学习笔记 | docker基本命令的更多相关文章

  1. Linux学习笔记-文件系统和基本命令

    目录 分区设备文件名 分区 挂载 文件目录 文件处理命令 目录处理命令 硬件设备文件名 IDE硬盘 /dev/hd[a-d] USB硬盘 /dev/sd[a-p] 光驱 /dev/cdrom或者/de ...

  2. Linux~学习笔记目录索引

    回到占占推荐博客索引 本篇文章是对自己学习Linux及在它的环境下部署工具的一个总结,以方便自己查阅,也给他人一个帮助,本文章同时会不断的更新,欢迎大家订阅! 本目录包括的内容会包括linux基础命令 ...

  3. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  4. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  5. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  6. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  7. 20160127 linux 学习笔记

    Linux学习笔记第一天 Linux基本介绍 Linux的起源和发展: 简单说linux是一种操作系统,可以安装在包括服务器.个人电脑,乃至PDA.手机.打印机等各类设备中. 起源: Linux起源于 ...

  8. linux —— 学习笔记(汇总)

    笔记目录:一.系统知识 和 基本概念                    二.常用操作                   三.系统管理(内存.设备.服务等管理)                   ...

  9. Linux学习笔记-林耐斯Notes-Linux就该这么学

    Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...

随机推荐

  1. 算法——移掉K位数字使得数值最小

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. leetcode 解题思路:如果这个数的各个位是递增的,那么直接从最后面开始移除一定就是最最小的:如果这个数的 ...

  2. JetBrains系列产品使用记录

    1.PyCharm中from  import提示找不到定义,提示错误,但其实是没有错误的 右键项目的根路径,Mark Directory As Source Root 2.自动换行 在Editor-& ...

  3. MariaDB的安装及相关配置

    MariaDB的安装及相关配置 安装 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start mar ...

  4. MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?

    概述 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持.最常使用的MYISAM与INNODB都支持表级锁定.表级锁定分为表共享 ...

  5. js下 Day10、尺寸位置属性

    一.元素尺寸信息 元素.offsetWidth: 元素的外宽高 width + padding + border 元素.offsetHeight: 元素的外宽高 height + padding + ...

  6. [OI笔记]基础图论/图算法

    [2017.8.29 00:00]--前几天开始好好学了几天的图论,不过这最近又突然因为一些原因(其实是晚上没睡好导致白天没精神)颓废了几天-一方面为了控制自己同时也可以当做之后noip前复习用的笔记 ...

  7. Liunx运维(五)-信息显示与搜索文件命令

    文档目录: 一.uname:显示系统信息 二.hostname:显示或设置系统的主机名 三.dmesg:系统启动异常诊断 四.stat:显示文件或文件系统状态 五.du:统计磁盘空间使用情况 六.da ...

  8. kubeadm部署k8s

      Kubernetes技术已经成为了原生云技术的事实标准,它是目前基础软件领域最为热门的分布式调度和管理平台.于是,Kubernetes也几乎成了时下开发工程师和运维工程师必备的技能之一. 官方文档 ...

  9. python初学者-判断今天是今年的第几天代码

    判断今天是今年的第几天源代码 import time date =time.localtime() year,month,day=date[:3] day_month=[31,28,31,30,31, ...

  10. 如何优雅的将Object转换成List

    Main主函数中的 Object obj模拟了List对象.后续的代码首先判断obj是否是List类型,然后使用Class.cast做类型转换. 如果你想使用更方便的方法,可以直接调用下面的函数. p ...