镜和容器的对应关系:
镜——类
容器——对象
一、镜像操作
1、查看有哪些镜像下载下来的
docker images
2、搜索某一个镜像
docker search mysql
3、下载镜像
自动下载最新版本
docker pull mysql
自行选择版本
在docker官网去搜索需要下载的工具,以及版本号(在tags部分)
官网地址:https://hub.docker.com
docker pull tomcat:8.5-alpine
4、删除镜像
根据IMAGE ID也就是镜像id删除
例:
查询镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 91dadee7afee 10 days ago 477MB
删除某一个镜像
[root@localhost ~]# docker rmi 91dadee7afee
Untagged: mysql:latest
Untagged: mysql@sha256:4589ba2850b93d103e60011fe528fc56230516c1efb4d3494c33ff499505356f
Deleted: sha256:91dadee7afeebe274c51104d572ab6a2dc0ae97473f71afc57fbfd48c0ceb8aa
Deleted: sha256:82eee4082d8cbbe961ff33564cc655d1b9b4c73d118e9859bfec26a2c5e0714c
Deleted: sha256:cd9489e5896812af2e519e18470b6efe6ad19e556cefe38df1d9bab7706bdc94
Deleted: sha256:a7205b2f8740073d175dd4ee3c69d1fe44f2d31529fb947e6ded8899f0f2b52c
Deleted: sha256:f890db1a51f76670d9752256c6a897af077e608dc83711e756ddba7f22e9150b
Deleted: sha256:af3357c7a40759832f8e1188d7e73e5e1c2dfb503397ee2b8f61133bfce13b5b
Deleted: sha256:6780729a47b08db93437f74d430a865d4d0728707d134f540217a9ba773c4376
Deleted: sha256:1248c21c6b437a9b7528c6a61acc40589b9b373094a609552c91e719cb40df21
Deleted: sha256:4a9328c2c324474dcb8086184fca8490e7ecf49108df79544dd4dcf3418249ed
Deleted: sha256:8fb2b4cf6c7ae35084bc310b1895323488db795d86ba52dade834a0a0c1ccd7d
Deleted: sha256:a807a227b65063853920c7cd77eef1dbd4c79971f5774964fb2c8de13bbb3713
Deleted: sha256:f1e2c1fc3f1bd72b3bba73afc27a034da08037995fd914a3447b716b01830c17
Deleted: sha256:6744ca1b11903f4db4d5e26145f6dd20f9a6d321a7f725f1a0a7a45a4174c579
确认是否删除成功
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
二、容器操作
1、查看正在运行的容器
docker ps
查看所有容器,包括没有启动的
docker ps -a
2、启动容器
1)、普通启动
无法与Linux通信,没有做端口映射
docker run --name myTomcat -d tomcat:8.5-alpine
返回值是容器的Id
b3d1907c8c3d085ed3556ca89824d67e2459f6990a00cd78794e9f864d258500
--name:自定义容器名,不指定时,docker 会自动生成一个名称
-d:表示后台运行容器
image-name:指定运行的镜像名称以及 Tag
2)、端口映射启动
docker run --name myTomcat -d -p 8090:8080 tomcat:8.5-alpine
使用命令:docker run --name container-name:tag -d -p 服务器端口:Docker 端口 image-name
--name:自定义容器名,不指定时,docker 会自动生成一个名称
-d:表示后台运行容器
image-name:指定运行的镜像名称以及 Tag
-p 表示进行服务器与 Docker 容器的端口映射,默认情况下容器中镜像占用的端口是 Docker 容器中的端口与外界是隔绝的,必须进行端口映射才能访问
3、停止容器
根据容器的id来停止,使用命令
docker stop 容器id
代码如下:
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3d1907c8c3d tomcat:8.5-alpine "catalina.sh run" 5 minutes ago Up 5 minutes 8080/tcp myTomcat
[root@localhost ~]# docker stop b3d1907c8c3d
b3d1907c8c3d
4、重启容器
docker start b3d1907c8c3d
5、删除容器
需要先停止容器,再删除容器
docker rm b3d1907c8c3d
6、查看日志
直接用容器名字查看
docker logs myTomcat
三、运行mysql
1、下载mysql
docker pull mysql:5.5
2、运行mysql镜像
错误运行:
docker run --name mysql01 -d mysql
正确运行:
需要用-e指定用户密码
并且需要端口映射
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d mysql:5.5
四、运行centos
1、下载centos
docker pull centos
2、启动centos
docker run -it --name mycentos2 -d centos
3、进入centos
docker exec -it mycentos2 /bin/bash
4、下载可以使用ifconfig命令的插件
yum install -y net-tools
5、运行ifconfig
[root@77bfb721d749 /]# ifconfig
eth0: flags=4163 mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 6254 bytes 9896082 (9.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3475 bytes 191147 (186.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6、退出centos
exit
五、镜像定制
1、手动定制
1.先下载centos镜像
如果有该镜像乐意跳过此步
[root@docker ~]# docker pull centos
2.启动容器并进行配置
启动容器,
[root@docker ~]# docker run -it -d --name test-centos1 centos `
命令注释:-it : 进行交互式操作
-d : 等同于 -d=true,容器将会在后台运行,不然执行一次命令后,退出后,便是exit状态了。
--name : 容器启动后的名字,默认不指定,将会随机产生一个名字。或者使用 -name="containers_name"
centos:使用的镜像名称
进入容器,安装ssh server,以及配置开机启动
[root@docker ~]# docker exec -it test-centos1 /bin/bash
[root@d72250ecaa5e /]# ifconfig
bash: ifconfig: command not found
*注:命令最后参数 /bin/bash: 指进入容器时执行的命令(command)
我们检查了下容器,暂时安装以下必用的软件吧 net-tools,openssh-server
[root@d72250ecaa5e /]# yum install openssh-server net-tools -y
创建ssh 所需的目录,并在根目录创建sshd 启动脚本
[root@d72250ecaa5e /]# mkdir -pv /var/run/sshd mkdir: created directory '/var/run/sshd' [root@d72250ecaa5e /]# cat /auto_sshd.sh #!/bin/bash /usr/sbin/sshd -D
[root@d72250ecaa5e /]# chmod +x /auto_sshd.sh
修改容器内root 的账户密码
可以自己随便设一个密码,一定要记住
[root@d72250ecaa5e /]# echo "root:iloveworld" | chpasswd
生成ssh 主机dsa 密钥(不然ssh 该容器时,会出现错误。)
遇到输入Enter same passphrase again:时候,直接回车跳过
[root@d72250ecaa5e /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
[root@d72250ecaa5e /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
我们加一个history记录的时间功能吧,这样方便后期查看
echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile
OK,配置基本完毕咯。清理命令历史纪录,之后退出容器。现在可以生成一个新的docker 镜像了。
3.配置完成后,进行打包成新的镜像
1)、普通打包镜像
[root@docker ~]# docker commit test-centos1 centos_sshd
sha256:6e3330b30dfff5f029f102874e54cfffffbc37dcf2a4eb7304c817148fbc944d
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_sshd latest 6e3330b30dff 8 seconds ago 310.1 MB
docker.io/ubuntu latest e4415b714b62 12 days ago 128.1 MB
命令注释:commit: 提交一个具有新配置的容器成为镜像,后面跟容器的name 或者容器Id ,最后是生成新镜像的名字
2)、设置开机选项打包镜像
更新:这条命令更方便以后启动,如下:
[root@docker ~]# docker commit --change='CMD ["/auto_sshd.sh"]' -c "EXPOSE 22" test-centos1 centos_sshd
sha256:7bb4efd82c4ff1f241cbc57ee45aab1b05d214b1e9fcd51196696c67d480e70b
命令注释: --change : 将后期使用此镜像运行容器时的命令参数、开放的容器端口提前设置好。开启的时候自动运行auto_sshd.sh脚本
-c "EXPOSE 22" :暴露22端口,默认也是暴露的
4.验证
查看镜像,并启动新的容器
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_sshd latest 7bb4efd82c4f 4 minutes ago 310.1 MB
docker.io/ubuntu latest e4415b714b62 12 days ago 128.1 MB
[root@docker ~]# docker run -d -it --name my_centos centos_sshd ec17e553d5c4c60865afeb99df8dfd1f4e7d4ba6e1b0d5516f9127f09d1d6356
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec17e553d5c4 centos_sshd "/auto_sshd.sh" 6 seconds ago Up 5 seconds 22/tcp my_centos
进行ssh测试,先查看一下该容器的ip,之后ssh。ok
[root@docker ~]# docker exec -it my_centos /bin/bash
[root@docker ~]# ssh [email protected] //或者ssh 127.17.0.4
RSA key fingerprint is 87:88:07:12:ac:0a:90:28:10:e1:9e:eb:1f:d6:c9:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.4' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Tue Nov 29 16:00:49 2016 from gateway
[root@ec17e553d5c4 ~]# w
16:34:17 up 63 days, 7:49, 1 user, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 gateway 16:34 1.00s 0.00s 0.00s w [root@ec17e553d5c4 ~]# ping gateway
PING gateway (172.17.0.1) 56(84) bytes of data. 64 bytes from gateway (172.17.0.1): icmp_seq=1 ttl=64 time=0.048 ms
2.利用Dockerfile文件自动定制
1、创建Dockerfile文件
[root@localhost ~]# mkdir centos7-dockerfile
[root@localhost ~]# cd centos7-dockerfile/
[root@localhost ~]# cat Dockerfile
# The dockerfile has Change add sshd services on Centos7.0
#centos7:latest image
FROM centos:latest
MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng
#Install sshd net-tools
RUN yum install openssh-server net-tools -y
RUN mkdir /var/run/sshd
#Set password for root
RUN echo 'root:iloveworld' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
#Set history record
ENV HISTTIMEFORMAT "%F %T "
#Fix sshd service:Read from socket failed: Connection reset by peer?
RUN ssh-keygen -A
#Change timezone CST
RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#Open 22 port
EXPOSE 22
#Auto running sshd service
CMD ["/usr/sbin/sshd","-D"]
``
###2.执行build 创建镜像
docker build -t centos_new .
###3.查看镜像列表,并创建容器
输入密码即可
[root@localhost centos7-dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_new latest 37244727ac6e About a minute ago 283MB
centos latest 1e1148e4cc2c 3 months ago 202MB
[root@localhost centos7-dockerfile]# docker run -it -d --name contain_new centos_new
d99be6d58a1cba6dbcd0d2cd2448a557faf14ee7897bafe1ef60b04875901cd3
[root@localhost centos7-dockerfile]# docker exec contain_new hostname -i
172.17.0.2
[root@localhost centos7-dockerfile]# ssh 127.17.0.2
[email protected]'s password: