Docker安装

Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和Ubuntu, 可以通过添加仓库地址再通过 yum install 或 apt install安装, 也可以下载rpm包和deb包进行安装.

方式一: 通过deb包进行安装

对应Ubuntu18.04 64bit系统的deb下载地址是 https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/

Update 2018-12-18: 在版本18.09之后, docker将安装包分成了三个, container.io, docker-ce-cli 和 docker-ce, 需要依次都安装

安装完之后, 会自动在系统中添加 docker 服务

方式二: 通过apt安装

sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce
# check
docker version

禁止docker随系统自启动

sudo systemctl disable docker

设置docker的mirror, 否则build会非常慢

方法一:

$ sudo edit /lib/systemd/system/docker.service
# 修改以下这行, 加上后面的 --registry-mirror=https://docker.mirrors.ustc.edu.cn
ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://docker.mirrors.ustc.edu.cn

方法二:

编辑/etc/docker/daemon.json 添加以下内容, docker-cn.com也是国内的源. 一个暂时还可用的阿里的源 https://x9o4p9lt.mirror.aliyuncs.com/

{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}

将自己的用户加入docker用户组, 用id命令查看是否生效. 需要退出本ID的全部登录, 使group设置生效, 如果不生效则重启.

# 加入用户组
sudo usermod -aG docker milton
# 查看结果
getent group
# 或者
cat /etc/group
# 查看是否生效
id

Docker Network相关命令

# 查看docker网络列表
docker network ls # 查看具体网络明细
docker network inspect mybridge # 创建自定义网络
docker network create --subnet=192.168.250.1/24 mybridge

Docker Image相关命令

# 查找image
docker search centos # 下载image, 对已经下载的image, 再次执行pull命令时, 会检查更新并下载
docker pull centos:latest # 查看image
docker image ls
docker image ls --all # 删除image
docker image rm [IMAGE ID] # 导出image
docker save milton-java -o docker-image-milton-java.tar # 导入image (可以在其他主机上)
docker load -i docker-image-milton-java.tar # 使用Dockerfile制作image
docker build -t scot-eureka:1.0 [Dockerfile存放路径]/

注意: 制作image的过程中, 如果失败退出, 会产生一个停止的容器, 以及一个<none>属性的image, 需要对应的用docker rm和docker image rm清理掉

Docker 容器相关命令

# 用image创建容器, 使用默认的bridge网络并启动
docker run -d --name eureka -p 8762:8761 scot-eureka
docker run -d --name mongo -v /home/milton/mongo:/mongo -p 27017:27017 mongo:4
docker run -d --name mysql57 -v /home/milton/mysql57:/mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8 # 用image创建容器并启动, 指定固定IP (必须使用自定义network)
docker run -d --name redis2 --net mybridge --ip 192.168.250.2 redis:4.0.11
docker run -itd --name java8 --net mybridge --ip 192.168.250.4 java:8 /bin/bash
docker run -itd --name eureka --net mybridge --ip 192.168.250.3 scot-eureka:latest /bin/bash # 查看容器
docker ps
docker ps -a # 查看容器日志
docker logs -f [CONTAINER NAME] # 将当前终端加入容器, 不是用-it启动的容器勿进行此操作, 否则无法用 ^P^Q退出
docker attach [CONTAINER NAME] # 进入容器shell, 在容器中交互地执行命令, 用这种方式进入容器shell是比较安全的, 可以通过exit返回主机shell
docker exec -it java8 /bin/bash # 启动/停止容器
docker start/stop [CONTAINER NAME] # 删除容器
docker rm [CONTAINER NAME] # 用容器ID创建image
docker commit -a "Milton" -m "java:8 with nano+net-tools" 8da987975c42 milton-java:8

如果是启动ubuntu这样的容器, 需要使用 -itd 参数, 如果只使用 -d, 那么因为没有跑主进程, 容器会立即退出, 例如

# 运行一个ubuntu18.04容器, 名称为ubuntu1, 将22端口映射到宿主的50001端口上, 在/ubuntu1目录挂载宿主的/home/milton/ubuntu1目录
docker run -dit --name ubuntu1 -v /home/milton/ubuntu1:/ubuntu1 -p 50001:22 ubuntu:18.04

如果只是一次性使用的容器, 需要加上--rm参数, 例如

docker run -it --rm ubuntu:16.04 bash

配置容器随着docker服务启动而自启动

# 查看容器配置
# docker inspect [container id]
# 检查里面的 RestartPolicy
docker inspect mongo # 设置容器自动启动
# docker update --restart=always [container id]
# 默认为no状态, 对于always状态, 在容器被手动stop时是不会自动重启的.
docker update --restart=always mongo

.

Docker其他常用命令

# 测试运行Hello World
docker run hello-world
# 查看版本
docker --version
# 查看信息
docker info
# 登录, 回车会提示输入密码. 不登录的话, 无法下载alpine这样的image
docker login -u [username]

.

Docker run命令的详细参数说明

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

参数说明

-a, --attach    绑定标准输入输出 Attach to STDIN, STDOUT or STDERR (default [])
-c, --cpu-shares int     CPU的份额(相对权重, 整数)  CPU shares (relative weight)
     --cpuset-cpus       绑定容器到指定CPU运行, CPUs in which to allow execution (0-3, 0,1)
-d, --detach   后台运行容器,并返回容器ID Run container in background and print container ID
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-p,  小写的P为端口映射,格式为:主机(宿主)端口:容器端口, Publish a container's port(s) to the host (default [])
-P, --publish-all 大写的P表示将所有暴露的端口随机发布 Publish all exposed ports to random ports
-m :设置容器使用内存最大值
-h, --hostname   指定容器的hostname, 例如 "mars"
-e, --env username="ritchie": 设置环境变量
     --env-file value 从指定文件读入环境变量 Read in a file of environment variables (default [])
-u, --user     用户名或UID, Username or UID (format: <name|uid>[:<group|gid>])
-v, --volume     绑定一个本地路径到容器的指定路径. 这样当容器结束后数据依然留在本地文件系统中 Bind mount a volume (default [])
--name "nginx-lb"    为容器指定一个名称, 不能与已经存在的容器重名
--ip   指定容器的IPv4地址, 必须要和 --net 合用, 只能用于自定义网络, 不能使用docker默认的bridge网络, Container IPv4 address (e.g. 172.30.100.104)
--ip6   指定容器的IPv6地址, Container IPv6 address (e.g. 2001:db8::33)
--mac-address    指定容器的MAC地址 Container MAC address (e.g. 92:d0:c6:0a:29:33)
--dns 8.8.8.8    指定容器使用的DNS服务器,默认和宿主一致
--dns-search example.com    指定容器DNS搜索域名,默认和宿主一致
--net="bridge": 指定容器的网络, 支持 bridge/host/none/container: 四种类型
--ulimit     Ulimit选项 Ulimit options (default [])
--link=[]: 添加链接到另一个容器
--expose     开放一个端口或一组端口 Expose a port or a range of ports (default [])
--rm          自动检测如果容器存在, 则将其删除 Automatically remove the container when it exits

例子

# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx
docker run --name mynginx -d nginx:latest
# 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口
docker run -p -d nginx:latest
# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 端口映射到主机的 端口,主机的目录 /data 映射到容器的 /data
docker run -p : -v /data:/data -d nginx:latest
# 绑定容器的 端口,并将其映射到本地主机 127.0.0.1 的 端口上。
docker run -p 127.0.0.1::/tcp ubuntu bash
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
# 生产环境中设置了环境变量的启动命令
docker run -d \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /:/host \
 -e FLUENTD_OUTPUT=elasticsearch \
 -e ELASTICSEARCH_HOST=elasticsearch \
 -e ELASTICSEARCH_PORT=9200 \
 --link=quickstart_elasticsearch_1:elasticsearch \
registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:latest

.

Docker安装和常用命令的更多相关文章

  1. docker 安装与常用命令与常用容器(containers)环境

    注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...

  2. Docker 安装与常用命令介绍

    docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...

  3. Docker 安装与常用命令

    目录 Docker 安装 1)安装 2)启动 3)镜像加速器 Docker 常用命令 1)Docker 进程相关命令 2)Docker 镜像相关命令 docker search:查找镜像仓库中的镜像 ...

  4. Docker安装及常用命令

    修改机器名: [root@docker /]# hostnamectl set-hostname Docker 安装EPEL源: [root@docker /]# yum -y install epe ...

  5. docker安装以及常用命令

    yum-config-manager 对/etc/yum.repos.d/下的.repo文件进行增删改查 yum install -y yum-utils 添加docker源,由于yum源的docke ...

  6. Docker 入门指南——常用命令

    前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...

  7. Docker系列之常用命令操作手册

    目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...

  8. Docker基础和常用命令

    Docker基础和常用命令 一,Docker 简介 1.1,什么是 Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,nam ...

  9. ios开发环境配置及cordova安装与常用命令

    一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本 ...

随机推荐

  1. JAVA 是否会发生内存泄露(转)

    原文链接: JAVA 是否会发生内存泄露 几次面试,面试官都问到了这个问题,于是搜集了答案.总结出虽然java自身有垃圾回收机制,但是很多情况下还是发生内存泄露的. java导致内存泄露的原因很明确: ...

  2. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h

    DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...

  3. 卡卡游戏引擎之MVC模式下的事件处理

    前言 在前一篇文章 卡卡游戏引擎快速入门中提到了卡卡游戏引擎采用mvc的开发模式,这里相信介绍一下引擎在mvc模式下是如何做到低耦合的事件处理的. 在卡卡编辑器中选择一个节点,然后在左侧工具栏中切换到 ...

  4. 为sharepoint的内部页面添加后台代码

    我们知道,存储在数据库里的SharePoint页面是不能直接添加后台代码的,这给我们带来了很多的不方便,比如想要在页面上实现一些东西,都必 须使用Webpart或者自定义控件的方式,哪怕仅仅是很简单的 ...

  5. 快速书写常见的 Kotlin 代码 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. jquery ajax 的 $.get()用法详解

    js文件 $(document).ready(function(){ $("form").submit(function(event) {event.preventDefault( ...

  7. extjs_08_界面布局

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  8. 在webstorm中配置sass环境

    最近开始用SASS,LESS等来写CSS,而在Webstorm中,它自带一个File Watchers功能,设置一下,即可实时编译SASS,LESS等. LESS的实时编译很简单,在node平台安装一 ...

  9. 【Python】使用geocoder找出本机IP所在经纬度和城市

    代码: import geocoder g = geocoder.ip('me') print(g.latlng) # 经纬度 print(g.city) # 所在城市 输出: C:\Users\ho ...

  10. Spring中默认bean名称的生成策略/方式修改

    最近公司项目打算模块化,其实一个原因也是为了能够整合公司多个业务的代码,比如一个资源xxx,两个业务中都有对这个资源的管理,虽然是一个资源,但是是完全不同的定义.完全不同的表.不同的处理逻辑.所以打算 ...