Docker基础操作
安装
ubuntu16.04安装docker
sudo apt-get update
sudo apt-get install docker
sudo apt-get install docker.io
sudo apt-get install docker-registry
# 启动docker
sudo systemctl start docker
win10安装docker
打开控制面板 --> 程序 --> 启用或关闭windows功能 --> 勾选Hyper-V --> 根据提示进行重启(打开这个功能则无法再使用VMware和virtualbox了)
docker安装文件下载链接(需要登陆dockers,如果没有账号,注册一个就好)
安装docker,一路next
启动后任务栏上会出现一个‘鲸鱼’的图标
镜像加速
linux:
vim /etc/docker/daemon.json (不存在该文件则创建一个新的)
添加如下内容:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
windows:
右键任务栏‘小鲸鱼’图标,选择Settings --> Daemon
选择Basic
在Registy mirrors中输入:http://hub-mirror.c.163.com
参数说明
参数 | 说明 |
---|---|
-t | 让docker分配一个伪终端并绑定到容器的标准输入上 |
-i | 容器的标准输入保持打开 |
-d | 后台运行 |
--name | 创建容器时给容器命名 |
-v | 共享文件或者目录的映射;或者是创建可以共享的数据卷容器 |
--volumes-from | 指定共享的数据卷容器 |
-p | 绑定端口进行映射 |
--expose | 暴露端口号 |
--link | 链接另一个容器 |
--net | 指定桥接网络 |
镜像操作
下载镜像
sudo docker pull REPOSITORY:TAG
查看本地镜像
sudo docker images
搜索镜像
sudo docker search mysql
删除本地镜像
sudo docker rmi [-f] REPOSITORY:TAG
运行bash应用
sudo docker run -it REPOSITORY:TAG /bin/bash
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
更改Tag区分版本
sudo docker tag ubuntu:15.10 ubuntu:latest
基于容器创建镜像
sudo docker commit -m '描述信息' -a '作者' 容器的id 新镜像名称
本地镜像打包导出
sudo docker save -o ubuntu.15.10.tar REPOSITORY:TAG
导入打包镜像
sudo docker load --input ubuntu.15.10.tar
查看镜像详细信息
sudo docker inspect ubuntu
容器操作
sudo docker create -it REPOSITORY:TAG # 新建容器
sudo docker start NAME/CONTAINER ID # 后台启动容器
sudo docker run -it REPOSITORY:TAG /bin/bash # 创建并启动容器
sudo docker ps -a # 查看已有的容器
sudo docker run -d REPOSITORY:TAG /bin/bash -c 'while true;do echo "hello world" ;sleep 1;done' # 后台守护态形式运行
sudo docker logs NAME(name是ps查看,默认生成的) # 获取后台运行的输出信息
sudo docker attach NAME/CONTAINER ID (退出后容器stop) # 进入后台容器
or
sudo docker exec -ti NAME/CONTAINER ID /bin/bash (退出后容器任然在运行)
sudo docker stop NAME/CONTAINER ID # 终止容器
or
sudo docker kill NAME/CONTAINER ID
sudo docker rm NAME/CONTAINER ID # 删除容器
or
sudo docker rm -f NAME/CONTAINER ID
sudo docker export NAME/CONTAINER ID >test.tar # 导出容器
cat test.tar | sudo docker import - REPOSITORY:TAG # 导入容器
docker rename NAME 新名称 # 容器重命名
数据管理
数据卷
主机和容器共享数据
注意:win10下右击任务栏下的小鲸鱼图标,点击settings --> Shared Drives 勾选一个磁盘准许用于容器共享目录
# 命名 本机目录:映射到的容器目录(默认为可读写)
docker run -it --name ubuntu -v V:\workspace:/home/jfxu jfxu/ubuntu16.04:latest
# 命名 本机目录:映射到的容器目录:只读
docker run -it --name ubuntu -v V:\workspace:/home/jfxu:ro jfxu/ubuntu16.04:latest
数据卷容器
容器和容器之间共享数据
# 指定数据卷容器/dbdate
docker create -it -v /dbdate --name db0 jfxu/ubuntu16.04
# 共享db0中的数据卷容器
docker run -it --volumes-from db0 --name db1 jfxu/ubuntu16.04
docker run -it --volumes-from db0 --name db2 jfxu/ubuntu16.04
# 三个容器之间的可以通过/dbdate数据卷容器分享文件等
主机-容器-容器之间共享
docker create -it -v /share --name db0 jfxu/ubuntu16.04:latest
docker run -it --volumes-from db0 -v V:\share:/share --name db1 jfxu/ubuntu16.04:latest
容器互联
暴露端口方式(主机无法访问)
# 暴露容器5000的端口给其它容器访问
docker run -d --expose=5000 --name web training/webapp python app.py
# 进入bash查看ip
docker exec -it web /bin/bash
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3101 errors:0 dropped:0 overruns:0 frame:0
TX packets:1423 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4430088 (4.4 MB) TX bytes:81348 (81.3 KB)
# 启动一个Linux系统
docker run -it --name ubuntu jfxu/ubuntu16.04 /bin/bash
# 直接访问web容器的ip和端口
jfxu@6ea6db75cc53:/$ curl 172.17.0.2:5000
Hello world!
端口映射方式
语法:
# 主机ip:主机port:容器port(默认是tcp,可以不写) 多端口绑定
docker run -p ip:hostPort:containerPort(/udp) [ip:hostPort:containerPort(/udp)] [ip:hostPort:containerPort(/udp)] ... REPOSITORY:TAG
本机端口 ---> 虚拟机端口
docker run -d -p 5000:5000 training/webapp python app.py
指定地址的端口 ---> 虚拟机端口
docker run -d -p 10.10.75.1:5000:5000 training/webapp python app.py
指定地址的任意端口 ---> 虚拟机端口
docker run -d -p 10.10.75.1::5000 training/webapp python app.py
端口动态映射
使用iptables
容器链接
# 启动一个web server
docker run -itd --name=web training/webapp
# 启动一个ubuntu并链接到web
docker run -itd --link web --name=client jfxu/ubuntu16.04
# 进入client
docker exec -it client /bin/bash
# 访问web server
$ curl 172.17.0.2:5000
Hello world!
单主机网络
自定义网络
# 创建网络
docker network create share
23a6ca73ecd77c0a877df1d31732240df761b871ddfe3d17b7074a60d599cab8
# 查看创建的桥接网络
PS C:\Users\jfxu> docker network ls
NETWORK ID NAME DRIVER SCOPE
faff47332d74 bridge bridge local
9544738b8ff0 host host local
7bc6102f7cc3 none null local
23a6ca73ecd7 share bridge local
###################################################
# docker network rm share # 删除自定义网络 #
###################################################
创建统一网络内的容器
# 启动一个web server
docker run -itd --net=share training/webapp python app.py
97ab73ed162d93ed4dd2ac99fd9c3816f6610e5334f84ff5094458a2d608ed5d
# 启动第一个client
docker run -itd --net=share --name=cli0 jfxu/ubuntu16.04
fa685d8fc0bddec747db35e7d4f204c12313898ab8b9c29c4c5192a241745210
# 启动第二个client
docker run -itd --net=share --name=cli1 jfxu/ubuntu16.04
dc6f13cd41eebdc4dddb25378347dd6b7ed7e8c23d8a0eff935a7a2db6688941
# 启动第三个client
docker run -itd --net=share --name=cli2 jfxu/ubuntu16.04
544a8581f7e57d514121ae11aa071e0dd67a310696c5ff82d3e470624936049c
# 查看已经启动的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
544a8581f7e5 jfxu/ubuntu16.04 "/bin/bash" 6 seconds ago Up 4 seconds cli2
dc6f13cd41ee jfxu/ubuntu16.04 "/bin/bash" 11 seconds ago Up 9 seconds cli1
fa685d8fc0bd jfxu/ubuntu16.04 "/bin/bash" 18 seconds ago Up 16 seconds cli0
97ab73ed162d training/webapp "python app.py" About a minute ago Up 59 seconds 5000/tcp stoic_sinoussi
# 随便进入一个client
docker exec -it cli0 /bin/bash
# 访问webserver成功(先要进入webserver查看ip和端口号,这个server是一个flask server,app.py中默认的端口号是5000)
curl 172.19.0.2:5000
Hello world!
多主机网络
Docker现在提供了一个新的全局范围的overlay网络驱动,这意味着overlay的网络可以跨越多台Docker宿主机。并且这些Docker宿主机可以存在于不同的数据中心,甚至不同的云服务提供商中!
Docker基础操作的更多相关文章
- 二、Docker基础操作
原文:二.Docker基础操作 一.下载镜像 命令:docker pull xxxxxx(镜像名) docker pull training/weapp 二.运行镜像 docker run -d -P ...
- docker 基础操作
1. 安装docker 系统centos 7.2 yum -y install docker-io service docker start 安装完毕后执行 docker version 或者dock ...
- Docker 基础概念科普 和 常用操作介绍
Docker 基础概念 Docker是什么? Docker的思想来自于集装箱,集装箱解决了:在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之 ...
- docker基础命令和操作
前言 之前在部署个人网站的时候,需要打包maven,在生产环境,需要使用到docker去做服务器和端口的守护. 于是在查阅了相关资料,学习了docker一些基本命令行操作,包括对镜像的查看,修改和添加 ...
- docker基础命令,常用操作
docker基础命令 使用docker镜像 获取镜像 从docker registry获取镜像的命令是docker pull.命令格式是: docker pull [选项][docker regist ...
- Docker基础技术:Linux Namespace(下)
在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...
- Docker 基础技术:Linux Namespace(下)
导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...
- Docker基础入门及示例
Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...
- Docker 基础 : 镜像
目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...
随机推荐
- vs2017 创建虚拟目录失败 http//locXXXXXX,vs2015 无法访问IIS源数据
两个版本ide打开的错误提示不一样,但是一个解决都解决了 这个问题折磨了我接近五个小时 终于找到了解决方案,在百度上面搜的都没什么鸟用,最终还是在stackoverflow找到了解决方案,附上连接,虽 ...
- @RequestMapping、@ResponseBody和@RequestBody的使用
使用SSM框架进行Web开发时,经常在Controller中遇到@RequestMapping.@ResponseBody和@RequestMapping注解. 1.@RequsetMapping注解 ...
- Raspberry Pi 安装配置 Home Assistant
家庭助理(Home Assistant)是一款基于 Python 的智能家居开源系统,支持众多品牌的智能家居设备,可以轻松实现设备的语音控制.跟踪和控制家里的所有设备, 并自动化控制,能完美的运行在树 ...
- Linux 驱动——Button驱动4(fasync)异步通知
button_drv.c驱动文件: #include <linux/module.h>#include <linux/kernel.h>#include <linux/f ...
- react初学之render返回加括号的问题
刚在学习react的初始阶段,跑了一段代码 var Mydom = React.createClass({ render:function(){ return <div> <inp ...
- VmwareTools以及搜狗拼音的安装
已经那么多年工作下来了,结果装linux还是那么 的费劲! 装的是纯净版Ubuntu16.04版本,17.04怕不稳定就没装, 装了发现VmwareTools是暗的,以前也遇到过这个问题,但是真的忘记 ...
- CAShapeLayer绘图
之前讲过使用UIBezierPath在UIView的drawRect中绘图, 今天我们讲下另外一种方式: CAShaperLayer 先说说使用CAShapeLayer的优点: GPU执行, GPU执 ...
- java排序 冒泡?+插入排序
冒泡.public class insortSort { public static void main(String[] args) { int[] arr = {12, 3, 4, 55, 36, ...
- java数字转IP 一行
System.out.println(InetAddress.getByName(String.valueOf(12345)).getHostAddress());
- 【TLV】非递归TLV数据解析
#include <stdio.h> #define X_LEN_OF_TAG_MAX ( 2 ) #define X_LEN_OF_LEN_MAX ( 2 ) struct st_tlv ...