Docker安装
Docker的安装可以参考 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和Ubuntu, 可以通过添加仓库地址再通过 yum install 或 apt install安装, 也可以下载rpm包和deb包进行安装.
对应Ubuntu18.04 64bit系统的deb下载地址是
Update 2018-12-18: 在版本18.09之后, docker将安装包分成了三个, container.io, docker-ce-cli 和 docker-ce, 需要依次都安装
安装完之后, 会自动在系统中添加 docker 服务
禁止docker随系统自启动
sudo systemctl disable docker
设置docker的mirror, 否则build会非常慢
$ sudo edit /lib/systemd/system/docker.service# 修改以下这行, 加上后面的 --registry-mirror=https://docker.mirrors.ustc.edu.cnExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://docker.mirrors.ustc.edu.cn
将自己的用户加入docker用户组, 用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相关命令
# 查找imagedocker search centos# 下载image, 对已经下载的image, 再次执行pull命令时, 会检查更新并下载docker pull centos:latest# 使用Dockerfile制作imagedocker build -t scot-eureka .# 查看imagedocker image lsdocker image ls --alldocker imagesdocker images --all# 删除imagedocker rmi [IMAGE ID]# 导出imagedocker save milton-java -o docker-image-milton-java.tar# 导入image (可以在其他主机上)docker load -i docker-image-milton-java.tar
Docker 容器相关命令
# 用image创建容器, 使用默认的bridge网络并启动docker run -d --name eureka -p 8762:8761 scot-eurekadocker run -d --name mongo -v /home/milton/mongo:/mongo -p 27017:27017 mongo:4docker 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.11docker run -itd --name java8 --net mybridge --ip 192.168.250.4 java:8 /bin/bashdocker run -itd --name eureka --net mybridge --ip 192.168.250.3 scot-eureka:latest /bin/bash# 查看容器docker psdocker ps -a# 查看容器日志docker logs -f [CONTAINER NAME]# 将当前终端加入容器, 不是用-it启动的容器勿进行此操作, 否则无法用 ^P^Q退出docker attach [CONTAINER NAME]# 进入容器shell, 在容器中交互地执行命令, 用这种方式进入容器shell是比较安全的, 可以通过exit返回主机shelldocker exec -it java8 /bin/bash# 启动/停止容器docker start/stop [CONTAINER NAME]# 删除容器docker rm [CONTAINER NAME]# 用容器ID创建imagedocker commit -a "Milton" -m "java:8 with nano+net-tools" 8da987975c42 milton-java:8
.
Docker其他常用命令
# 测试运行Hello Worlddocker run hello-world# 查看版本docker --version# 查看信息docker info# 登录, 回车会提示输入密码. 不登录的话, 无法下载alpine这样的imagedocker 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以后台模式启动一个容器,并将容器命名为mynginxdocker run --name mynginx -d nginx:latest# 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口docker run -p -d nginx:latest# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /datadocker run -p 80:80 -v /data:/data -d nginx:latest# 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。docker run -p 127.0.0.1:80:8080/tcp ubuntu bash# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。runoob@runoob:~$ docker run -it nginx:latest /bin/bashroot@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
.