dock安装
curl -sSL https://get.daocloud.io/docker | sh
docker-compose 安装
curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
systemctl start docker
1.显示本机的镜像列表
docker images
2. 拉取docker 镜像
从网易拉取镜像。
docker pull hub.c.163.com/public/nginx:1.2.1
3.查看获取到镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 4ab4c602aa5e 3 weeks ago 1.84kB
busybox latest e1ddd7948a1c 2 months ago 1.16MB
hub.c.163.com/library/nginx latest 46102226f2fd 17 months ago 109MB
hub.c.163.com/public/nginx 1.2.1 2dc68ff797db 2 years ago 171MB
4. 在后台运行docker
在后台运行镜像ID,-d 参数意思是在后台运行
docker run -d 2dc68ff797db
26dc06315762402a1d05e614061bc66272c59eb230d5030076c3eb067385c64a
5.查看后台运行的docker 容器。
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26dc06315762 2dc68ff797db "/bin/sh -c '/etc/..." 8 seconds ago Up 6 seconds 22/tcp, 80/tcp, 443/tcp yo
26dc06315762 为容器ID
6.进到容器内部
容器本身也是一个linux系统。
# docker exec -it 容器ID 需要执行的命令
docker exec -it 26dc06315762 bash
[root@localhost ~]# docker exec -it 26dc06315762 bash
root@26dc06315762:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var
root@26dc06315762:/# which nginx
/usr/sbin/nginx
查看容器内的进程。
root@26dc06315762:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:05 ? 00:00:00 /bin/sh -c /etc/init.d/nginx start && /usr/sbin/sshd -D
root 9 1 0 03:05 ? 00:00:00 nginx: master process /usr/sbin/nginx
root 10 1 0 03:05 ? 00:00:00 /usr/sbin/sshd -D
www-data 11 9 0 03:05 ? 00:00:00 nginx: worker process
www-data 12 9 0 03:05 ? 00:00:00 nginx: worker process
www-data 13 9 0 03:05 ? 00:00:00 nginx: worker process
www-data 14 9 0 03:05 ? 00:00:00 nginx: worker process
root 15 0 0 03:10 pts/0 00:00:00 bash
root 23 15 0 03:13 pts/0 00:00:00 ps -ef
使用exit 命令退出容器。
--停止容器
docker stop 26dc06315762
7.docker 端口映射
将容器的80 端口映射到本机的 8080 端口。
docker run -d -p 8080:80 2dc68ff797db
8260e229cd9dfe1d821f2033b2d690adf6ae491515c250a11b9e9a1029856d5c
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8260e229cd9d 2dc68ff797db "/bin/sh -c '/etc/..." About a minute ago Up About a minute 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp affectionate_dubinsky
[root@localhost ~]# netstat -na | grep 8080
tcp6 0 0 :::8080 :::* LISTEN
docker stop 8260e229cd9dfe1d821f2033b2d690adf6ae491515c250a11b9e9a1029856d5c
8.将容器所有的端口映射到本地的随机端口
[root@localhost ~]# docker run -d -P 2dc68ff797db
79d98946edcd7a8d6a0e4fdb3a9b3556103b6a2cbdd484bbe253e53130989826
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79d98946edcd 2dc68ff797db "/bin/sh -c '/etc/..." 8 seconds ago Up 7 seconds 0.0.0.0:32770->22/tcp, 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp
大写P是将容器的所有开放端口映射成本机的随机端口。
9.volume 操作
volume 这个可以帮组我们将 宿主机器的 目录挂载到容器的目录中去,这样不会应为容器重启出现文件丢失的情况。
1.docker run -v /usr/share/nginx/www -d -p 80:80 2dc68ff797db
使用参数-v 将容器的/usr/share/nginx/www 目录映射到宿主机的目录,具体是那个目录我们可以通过如下命令查看。
使用 docker ps 查看运行的容器ID。
使用 docker inspect 5d842062e63d 命令查看容器的信息
"Mounts": [
{
"Type": "volume",
"Name": "bcc82524af695a2984d14cb545fab3df800b3bb45bbd2e93f421b96cc77da34b",
"Source": "/var/lib/docker/volumes/bcc82524af695a2984d14cb545fab3df800b3bb45bbd2e93f421b96cc77da34b/_data",
"Destination": "/usr/share/nginx/www",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
source 表示宿主容器的目录,我们进入到此目录,修改index.html文件,重新访问容器的服务,发现index.html 被修改。
使用命令进行卷映射.
2. docker run -v $PWD:/usr/share/nginx/www -d -p 80:80 2dc68ff797db
就是将宿主机的当前目录映射到 容器的/usr/share/nginx/www ,通过 docker inspect 容器ID访问。
"Mounts": [
{
"Type": "bind",
"Source": "/docker/tmp",
"Destination": "/usr/share/nginx/www",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
在这个 docker/tmp 目录增加index.html 文件,重新访问服务发现 访问到了 index.html 文件。
3.创建一个挂载卷容器,其他的容器使用这个卷容器进行数据共享。
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
创建一个数据卷容器。
docker run -it --volumes-from data_container unbuntu /bin/bash
运行另外的容器使用 数据卷容器。
在该容器下 执行 mount 命令,可以看到 有 /var/mydata 目录挂载了,在这个目录下增加文件,可以在宿主目录看到添加的文件。
10.编写dockerfile 构建自己的web程序
下载tomcat
docker pull hub.c.163.com/library/tomcat:latest
编写dockerfile
Dockerfile
from hub.c.163.com/library/tomcat
MAINTAINER zyg 58133370@qq.com
--拷贝程序到镜像目录
copy jsaas.war /usr/local/tomcat/webapps
--创建目录
RUN mkdir /usr/local/tomcat/jms
编译Dockerfile
docker build -t jsaas:latest .
查看编译后的文件
REPOSITORY TAG IMAGE ID CREATED SIZE
jsaas latest 330e27e1d2ba 13 minutes ago 520MB
运行镜像
docker run -d -p 8080:8080 jsaas