方式一

拉取镜像

1
docker pull centos

创建容器

1
docker run -i -t -d -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 -v /Users/dong/Project/www:/www/wwwroot --privileged=true --name centos-app centos

--privileged=true 表示给容器赋予root权限

--name centos-app 表示给容器起名叫centos-app

host模式:使用 –net=host 指定。

none模式:使用 –net=none 指定。

bridge模式:使用 –net=bridge 指定,默认设置。

container模式:使用 –net=container:NAME_or_ID 指定。

这条命令会用centos镜像创建并运行一个容器,命名为centos-paa。并将真机的20,21,80,443,888,8888这五个端口映射到docker容器中去。冒号左边是容器端口,右边是真机端口

查看正在运行的容器

docker ps 命令可以查看正在运行的容器

进入容器

1
docker exec -it centos-app /bin/bash

以交互式终端方式进入 centos-app 容器,并执行了 bash 命令,也就是获得一个可操作的 Shell。

方式二

这里根据Dockerfile方式构建一个CentOS的可远程SSH的镜像。

Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 生成的新镜像以centos镜像为基础
FROM centos
# 指定作者信息
MAINTAINER by dong
# 安装openssh-server
RUN yum -y install openssh-server

RUN mkdir /var/run/sshd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

# 指定root密码
RUN /bin/echo 'root:123456'|chpasswd
RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local

# 暴露的端口号
EXPOSE 20 21
EXPOSE 22
EXPOSE 80 8080 443
EXPOSE 888
EXPOSE 8888
EXPOSE 3306/mysql
EXPOSE 6379/radis
EXPOSE 11211/tcp 11211/udp
# EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

CMD /usr/sbin/sshd -D

build镜像

在Dockerfile当前目录执行下面语句,开始构建镜像。注意最后面的点不要忘了,表明是读取当前目录的Dockerfile文件。

1
$ docker build -t dong/centos .

dong/centos为新生成的镜像名称

启动容器

1
$ docker run -itd -P -v /Users/dong/Project/www:/www/wwwroot --privileged=true --name centos-dong dong/centos

常用命令

帮助启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 启动docker
$ systemctl start docker

# 停止docker
$ systemctl stop docker

# 重启docker
$ systemctl restart docker

# 查看docker状态
$ systemctl status docker

# 开机启动
$ systmectl enable docker

# 查看docker概要信息
$ docker info

# 查看docker总体帮助文档
$ docker --help

# 查看docker命令帮助问
$ docker 具体命令 --help

容器

创建并运行容器

1
docker run -i -t -d 容器ID或容器名

启动容器

1
docker start 容器ID或容器名

重启容器

1
docker restart 容器ID或容器名

停止容器

1
docker stop 容器ID或容器名

强制停止容器

1
docker kill 容器ID或容器名

进入容器

进入容器终端并保留为容器终端的输入形式(-it和bash的结合作用)

1
docker exec -it  容器ID或容器名  bash

退出容器

1
exit

删除容器

1
docker rm -f 容器ID或容器名

-f表示强制删除,运行中的容器也能删除

容器改名

1
docker rename <容器ID或容器名> <新的容器名>

将容器保存成镜像

1
docker commit <容器ID或容器名> <镜像名>

查看容器详情

1
docker inspect 容器id或容器名 

进入容器

1
docker attach 容器名

镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 在仓库中搜索镜像
$ docker search 镜像名
# 搜索前五个(默认25个)
$ docker search --limit 5 镜像名

# 拉取镜像
$ docker pull 镜像名
# 指定版本
$ docker pull 镜像名:版本号

# 查看所有镜像
$ docker images
# 只看镜像id
$ docker images -q

# 查看镜像/容器/数据卷所占的空
$ docker system df

查看镜像详情

1
docker inspect docker.io/镜像名

查看镜像历史

1
docker history docker.io/镜像名

删除镜像

1
docker rmi 镜像id

网络模式

1
2
docker network ls # dcoker网络模式列表
docker network inspect bridge # 查看正则使用bridge模式的容器