目录
- MacOS安装Docker
- Linux安装Docker
- Docker部署Nginx实践
- Docker的常用命令
参考
MacOS安装Docker
通过homebrew安装
brew install --cask --appdir=/Users/qianhao/Applications/Docker docker
手动下载
Linux安装Docker
- 查看当前的内核版本
Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。
uname -r
- 使用 root 权限更新 yum 包
yum -y update
这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了
注意
yum -y update:升级所有包同时也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核
- 卸载旧版本(如果之前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
查看可用版本有哪些
yum list docker-ce --showduplicates | sort -r
选择一个版本并安装:
yum install docker-ce-版本号
yum -y install docker-ce-18.03.1.ce
启动 Docker 并设置开机自启
systemctl start docker systemctl enable docker
Docker部署Nginx实践
- 拉取nginx镜像
默认最新版本latest
docker pull nginx
- 在宿主机中设置挂在目录
mkdir -p /data/nginx/{conf,conf.d,html,log}
- 配置文件放置挂在目录
#user www-data;
worker_processes auto;
#pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server{
listen 80;
server_name your_server_name; #你的serverName
root /usr/share/nginx/html;
index index.html;
}
}
- 启动nginx容器
docker run
--name my_nginx
-d -p 80:80
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /data/nginx/log:/var/log/nginx
-v /data/nginx/html:/usr/share/nginx/html
nginx
第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件
第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志
第三个-v:挂载静态页面目录
- 效果如下:
Docker的常用命令
查找镜像 docker search
$ docker search httpd
获取镜像 docker pull
$ docker pull ubuntu
$ docker pull ubuntu:15.10
本地镜像列表 docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
php 5.6 f40e9e0f10c8 9 days ago 444.8 MB
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB
ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB
hello-world latest 690ed74de00f 6 months ago 960 B
training/webapp latest 6fae60ef3446 11 months ago 348.8 MB
镜像重命名标签 docker tag
$ docker tag 860c279d2fec runoob/centos:dev
860c279d2fec
是镜像IDrunoob/centos
是目标REPOSITORYdev
是目标标签
删除镜像 docker rmi
删除 hello-world 镜像
$ docker rmi hello-world
构建镜像 docker build
使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
参数说明:
- -t :指定要创建的目标镜像名
- . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/centos 6.7 860c279d2fec About a minute ago 190.6 MB
runoob/ubuntu v2 70bf1840fd7c 17 hours ago 158.5 MB
ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB
php 5.6 f40e9e0f10c8 10 days ago 444.8 MB
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB
ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB
hello-world latest 690ed74de00f 6 months ago 960 B
centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB
training/webapp latest 6fae60ef3446 12 months ago 348.8 MB
我们可以使用新的镜像来创建容器
创建容器 docker run
- 基本命令
~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果
- 交互式启动容器
~$ docker run -it ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
此时我们已进入一个 ubuntu15.10 系统的容器.
各个参数解析:
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
运行 exit 命令或者使用 CTRL+D 来退出容器。
root@0123ce188bd8:/# exit
exit
root@runoob:~#
- 后台运行容器
~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
-d
参数用于以后台进程方式启动容器,返回容器 ID
- web端口映射
$ docker run -d -p 5000:5000 training/webapp python app.py
33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0
# 指定容器绑定的网络地址,比如绑定 127.0.0.1。通过访问 127.0.0.1:5001 来访问容器的 5000 端口
$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik
- 容器命名
使用--name
参数
$ docker run -d -P --name runoob training/webapp python app.py
43780a6eabaaf14e590b6e849235c75f3012995403f97749775e38436db9a441
删除容器 docker rm
$ docker rm -f 1e560fca3906
# 清理掉所有处于终止状态的容器
$ docker container prune
停止容器 docker stop
# 使用容器ID停止容器
~$ docker stop 5917eac21c36
# 使用容器别名停止容器
~$ docker stop my_docker
启动容器 docker start
# 使用容器ID停止容器
~$ docker start 5917eac21c36
# 使用容器别名停止容器
~$ docker start my_docker
重启容器 docker restart
$ docker restart <容器 ID>
进入容器 docker exec
$ docker exec -it 243c32535da7 /bin/bash
查看容器运行情况 docker ps
~$ docker ps
CONTAINER ID IMAGE COMMAND ...
5917eac21c36 ubuntu:15.10 "/bin/sh -c 'while t…" ...
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
- 使用 -a参数可以显示非运行状态下的容器
~$ docker ps -a
查看容器标准输出 docker logs
~$ docker logs 5917eac21c36
5917eac21c36
是容器ID
查看容器端口映射 docker port
$ docker port 容器ID 5000
127.0.0.1:5001