The current AMIs for all Container Linux channels and EC2 regions are listed below and updated frequently. Questions can be directed to the CoreOS IRC channel or user mailing list.
Container Linux is designed to be updated automatically with different schedules per channel. You can disable this feature, although we don't recommend it. Read the release notes for specific features and bug fixes.
The Alpha channel closely tracks master and is released frequently. The newest versions of system libraries and utilities will be available for testing. The current version is Container Linux 2514.1.0.
View as json feed| EC2 Region | AMI Type | AMI ID |
|---|---|---|
| ap-northeast-1 | PV | ami-0860588c89b4d3705 |
| HVM | ami-0b8fc73f3b21c7350 | |
| ap-northeast-2 | HVM | ami-0fb8eabe30505bc13 |
| ap-south-1 | HVM | ami-0288e3806cff3aca5 |
| ap-southeast-1 | PV | ami-0a26f3ee936a6e2e1 |
| HVM | ami-0c2255675b402ce3a | |
| ap-southeast-2 | PV | ami-00fdb5fb2853a8a12 |
| HVM | ami-0651b52a3a94c0e2f | |
| ca-central-1 | HVM | ami-01f7d79ad4afc76fa |
| eu-central-1 | PV | ami-0e036b43241c12898 |
| HVM | ami-0653df6f6357ee5e7 | |
| eu-north-1 | HVM | ami-0709fa64b85a75847 |
| eu-west-1 | PV | ami-062debd18fae23c9d |
| HVM | ami-0bd4eab9eeeea21d6 | |
| eu-west-2 | HVM | ami-01fbc830b2cfb4ef3 |
| eu-west-3 | HVM | ami-0011e3d99a9fc1286 |
| sa-east-1 | PV | ami-054f742b197c717f5 |
| HVM | ami-07bbfb5436aa090ad | |
| us-east-1 | PV | ami-095505a84e12e365e |
| HVM | ami-0c1eaf56b1bebcaa8 | |
| us-east-2 | HVM | ami-06bb4d173a795a049 |
| us-gov-east-1 | HVM | ami-0276e6af17d48ef56 |
| us-gov-west-1 | PV | ami-5fe4d83e |
| HVM | ami-c1ead6a0 | |
| us-west-1 | PV | ami-09d0e5b1f9147d6b9 |
| HVM | ami-093aa903fde076cc8 | |
| us-west-2 | PV | ami-052f3d1328808f089 |
| HVM | ami-0872ebf0675a6af7d |
The Beta channel consists of promoted Alpha releases. The current version is Container Linux 2513.2.0.
View as json feed| EC2 Region | AMI Type | AMI ID |
|---|---|---|
| ap-northeast-1 | PV | ami-0040e85009f27fa16 |
| HVM | ami-0ec338e49804b2df1 | |
| ap-northeast-2 | HVM | ami-092226012b4871923 |
| ap-south-1 | HVM | ami-0fd6a8ca237b83b09 |
| ap-southeast-1 | PV | ami-08efa0532c4b8d933 |
| HVM | ami-0cc24619002fec470 | |
| ap-southeast-2 | PV | ami-06e83c6c1349be123 |
| HVM | ami-049cb66af2b04ee99 | |
| ca-central-1 | HVM | ami-03109ef5b8927ae8a |
| eu-central-1 | PV | ami-03780368d6099125d |
| HVM | ami-00e543180a78000cd | |
| eu-north-1 | HVM | ami-0350077741d46ce72 |
| eu-west-1 | PV | ami-0ccbab9d61ff8440b |
| HVM | ami-0df21df0d4edcc5e3 | |
| eu-west-2 | HVM | ami-09f5bc280df7e5dc6 |
| eu-west-3 | HVM | ami-06d582d792581a8d7 |
| sa-east-1 | PV | ami-066fb147e2ddc4920 |
| HVM | ami-0461131b821e8b379 | |
| us-east-1 | PV | ami-07e7d593e18c4f958 |
| HVM | ami-08ca65b75f87b8cec | |
| us-east-2 | HVM | ami-069116e72273ef766 |
| us-gov-east-1 | HVM | ami-03d142e3f953445c5 |
| us-gov-west-1 | PV | ami-60e8d401 |
| HVM | ami-94ead6f5 | |
| us-west-1 | PV | ami-0f46463f1f542e095 |
| HVM | ami-013e12b63faeb6057 | |
| us-west-2 | PV | ami-0ef8302341618f3f8 |
| HVM | ami-053fa444f0f75a17f |
The Stable channel should be used by production clusters. Versions of Container Linux are battle-tested within the Beta and Alpha channels before being promoted. The current version is Container Linux 2512.3.0.
View as json feed| EC2 Region | AMI Type | AMI ID |
|---|---|---|
| ap-northeast-1 | PV | ami-01c23e55b16ef2833 |
| HVM | ami-0afcaf08399d2f248 | |
| ap-northeast-2 | HVM | ami-0be3493e7bf709a40 |
| ap-south-1 | HVM | ami-075d6bb7121baef28 |
| ap-southeast-1 | PV | ami-06bb81bf4af6b6714 |
| HVM | ami-0c45c2b94700c3e25 | |
| ap-southeast-2 | PV | ami-014acf7d7fb93097c |
| HVM | ami-0b559bb97a30b321c | |
| ca-central-1 | HVM | ami-08f3e2f92326915bf |
| eu-central-1 | PV | ami-037801989df14b1fd |
| HVM | ami-0b7266aa375b9922c | |
| eu-north-1 | HVM | ami-0a20c739689f24d09 |
| eu-west-1 | PV | ami-0944610a5c1f5b2ce |
| HVM | ami-0bb08377c73e1e91c | |
| eu-west-2 | HVM | ami-0d4ee09557c9e8335 |
| eu-west-3 | HVM | ami-0354910c22483b23f |
| sa-east-1 | PV | ami-013b84da129d32574 |
| HVM | ami-0d8f6bd4e37164cfd | |
| us-east-1 | PV | ami-0c0e85d21260bf1c7 |
| HVM | ami-0a9e4c122b56383bf | |
| us-east-2 | HVM | ami-0f3f110d7176bc5b0 |
| us-gov-east-1 | HVM | ami-0329719be042c183d |
| us-gov-west-1 | PV | ami-61e8d400 |
| HVM | ami-92e4d8f3 | |
| us-west-1 | PV | ami-056b1bd5f4aa25baf |
| HVM | ami-05f4f28a47c4e7dbe | |
| us-west-2 | PV | ami-0c4a0f229d91c03c8 |
| HVM | ami-0c70a6d7b12a24405 |
Container Linux allows you to configure machine parameters, configure networking, launch systemd units on startup, and more via Container Linux Configs. These configs are then transpiled into Ignition configs and given to booting machines. Head over to the docs to learn about the supported features.
You can provide a raw Ignition config to Container Linux via the Amazon web console or via the EC2 API.
As an example, this Container Linux Config will configure and start etcd:
# This config is meant to be consumed by the config transpiler, which will
# generate the corresponding Ignition config. Do not pass this config directly
# to instances of Container Linux.
etcd:
# All options get passed as command line flags to etcd.
# Any information inside curly braces comes from the machine at boot time.
# multi_region and multi_cloud deployments need to use {PUBLIC_IPV4}
advertise_client_urls: "http://{PRIVATE_IPV4}:2379"
initial_advertise_peer_urls: "http://{PRIVATE_IPV4}:2380"
# listen on both the official ports and the legacy ports
# legacy ports can be omitted if your application doesn't depend on them
listen_client_urls: "http://0.0.0.0:2379"
listen_peer_urls: "http://{PRIVATE_IPV4}:2380"
# generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
# specify the initial size of your cluster with ?size=X
discovery: "https://discovery.etcd.io/<token>"
{
"ignition": {
"config": {},
"timeouts": {},
"version": "2.1.0"
},
"networkd": {},
"passwd": {},
"storage": {},
"systemd": {
"units": [
{
"dropins": [
{
"contents": "[Unit]\nRequires=coreos-metadata.service\nAfter=coreos-metadata.service\n\n[Service]\nEnvironmentFile=/run/metadata/coreos\nExecStart=\nExecStart=/usr/lib/coreos/etcd-wrapper $ETCD_OPTS \\\n --listen-peer-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2380\" \\\n --listen-client-urls=\"http://0.0.0.0:2379\" \\\n --initial-advertise-peer-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2380\" \\\n --advertise-client-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2379\" \\\n --discovery=\"https://discovery.etcd.io/\u003ctoken\u003e\"",
"name": "20-clct-etcd-member.conf"
}
],
"enable": true,
"name": "etcd-member.service"
}
]
}
}
Ephemeral disks and additional EBS volumes attached to instances can be mounted with a .mount unit. Amazon's block storage devices are attached differently depending on the instance type. Here's the Container Linux Config to format and mount the first ephemeral disk, xvdb, on most instance types:
# This config is meant to be consumed by the config transpiler, which will
# generate the corresponding Ignition config. Do not pass this config directly
# to instances of Container Linux.
storage:
filesystems:
- mount:
device: /dev/xvdb
format: ext4
wipe_filesystem: true
systemd:
units:
- name: media-ephemeral.mount
enable: true
contents: |
[Mount]
What=/dev/xvdb
Where=/media/ephemeral
Type=ext4
[Install]
RequiredBy=local-fs.target
{
"ignition": {
"config": {},
"timeouts": {},
"version": "2.1.0"
},
"networkd": {},
"passwd": {},
"storage": {
"filesystems": [
{
"mount": {
"device": "/dev/xvdb",
"format": "ext4",
"wipeFilesystem": true
}
}
]
},
"systemd": {
"units": [
{
"contents": "[Mount]\nWhat=/dev/xvdb\nWhere=/media/ephemeral\nType=ext4\n\n[Install]\nRequiredBy=local-fs.target",
"enable": true,
"name": "media-ephemeral.mount"
}
]
}
}
For more information about mounting storage, Amazon's own documentation is the best source. You can also read about mounting storage on Container Linux.
To add more instances to the cluster, just launch more with the same Container Linux Config, the appropriate security group and the AMI for that region. New instances will join the cluster regardless of region if the security groups are configured correctly.
Container Linux is set up to be a little more secure than other cloud images. By default, it uses the core user instead of root and doesn't use a password for authentication. You'll need to add an SSH key(s) via the AWS console or add keys/passwords via your Container Linux Config in order to log in.
To connect to an instance after it's created, run:
ssh core@<ip address>
If you would like to create multiple clusters you will need to change the "Stack Name". You can find the direct template file on S3.
TL;DR: launch three instances of ami-0c1eaf56b1bebcaa8 in us-east-1 with a security group that has open port 22, 2379, 2380, 4001, and 7001 and the same "User Data" of each host. SSH uses the core user and you have etcd and Docker to play with.
You need open port 2379, 2380, 7001 and 4001 between servers in the etcd cluster. Step by step instructions below.
This step is only needed once
First we need to create a security group to allow Container Linux instances to communicate with one another.
Inbound tabSSHCustom TCP ruleWe will be launching three instances, with a few parameters in the User Data, and selecting our security group.
# This config is meant to be consumed by the config transpiler, which will
# generate the corresponding Ignition config. Do not pass this config directly
# to instances of Container Linux.
etcd:
# All options get passed as command line flags to etcd.
# Any information inside curly braces comes from the machine at boot time.
# multi\_region and multi\_cloud deployments need to use {PUBLIC\_IPV4}
advertise\_client\_urls: "http://{PRIVATE\_IPV4}:2379"
initial\_advertise\_peer\_urls: "http://{PRIVATE\_IPV4}:2380"
# listen on both the official ports and the legacy ports
# legacy ports can be omitted if your application doesn't depend on them
listen\_client\_urls: "http://0.0.0.0:2379"
listen\_peer\_urls: "http://{PRIVATE\_IPV4}:2380"
# generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
# specify the initial size of your cluster with ?size=X
discovery: "https://discovery.etcd.io/<token>"
{
"ignition": {
"config": {},
"timeouts": {},
"version": "2.1.0"
},
"networkd": {},
"passwd": {},
"storage": {},
"systemd": {}
}
We will be launching three instances, with a few parameters in the User Data, and selecting our security group.
# This config is meant to be consumed by the config transpiler, which will
# generate the corresponding Ignition config. Do not pass this config directly
# to instances of Container Linux.
etcd:
# All options get passed as command line flags to etcd.
# Any information inside curly braces comes from the machine at boot time.
# multi_region and multi_cloud deployments need to use {PUBLIC_IPV4}
advertise_client_urls: "http://{PRIVATE_IPV4}:2379"
initial_advertise_peer_urls: "http://{PRIVATE_IPV4}:2380"
# listen on both the official ports and the legacy ports
# legacy ports can be omitted if your application doesn't depend on them
listen_client_urls: "http://0.0.0.0:2379"
listen_peer_urls: "http://{PRIVATE_IPV4}:2380"
# generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
# specify the initial size of your cluster with ?size=X
discovery: "https://discovery.etcd.io/<token>"
{
"ignition": {
"config": {},
"timeouts": {},
"version": "2.1.0"
},
"networkd": {},
"passwd": {},
"storage": {},
"systemd": {
"units": [
{
"dropins": [
{
"contents": "[Unit]\nRequires=coreos-metadata.service\nAfter=coreos-metadata.service\n\n[Service]\nEnvironmentFile=/run/metadata/coreos\nExecStart=\nExecStart=/usr/lib/coreos/etcd-wrapper $ETCD_OPTS \\\n --listen-peer-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2380\" \\\n --listen-client-urls=\"http://0.0.0.0:2379\" \\\n --initial-advertise-peer-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2380\" \\\n --advertise-client-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2379\" \\\n --discovery=\"https://discovery.etcd.io/\u003ctoken\u003e\"",
"name": "20-clct-etcd-member.conf"
}
],
"enable": true,
"name": "etcd-member.service"
}
]
}
}
We will be launching three instances, with a few parameters in the User Data, and selecting our security group.
# This config is meant to be consumed by the config transpiler, which will
# generate the corresponding Ignition config. Do not pass this config directly
# to instances of Container Linux.
etcd:
# All options get passed as command line flags to etcd.
# Any information inside curly braces comes from the machine at boot time.
# multi_region and multi_cloud deployments need to use {PUBLIC_IPV4}
advertise_client_urls: "http://{PRIVATE_IPV4}:2379"
initial_advertise_peer_urls: "http://{PRIVATE_IPV4}:2380"
# listen on both the official ports and the legacy ports
# legacy ports can be omitted if your application doesn't depend on them
listen_client_urls: "http://0.0.0.0:2379"
listen_peer_urls: "http://{PRIVATE_IPV4}:2380"
# generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
# specify the initial size of your cluster with ?size=X
discovery: "https://discovery.etcd.io/<token>"
{
"ignition": {
"config": {},
"timeouts": {},
"version": "2.1.0"
},
"networkd": {},
"passwd": {},
"storage": {},
"systemd": {
"units": [
{
"dropins": [
{
"contents": "[Unit]\nRequires=coreos-metadata.service\nAfter=coreos-metadata.service\n\n[Service]\nEnvironmentFile=/run/metadata/coreos\nExecStart=\nExecStart=/usr/lib/coreos/etcd-wrapper $ETCD_OPTS \\\n --listen-peer-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2380\" \\\n --listen-client-urls=\"http://0.0.0.0:2379\" \\\n --initial-advertise-peer-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2380\" \\\n --advertise-client-urls=\"http://${COREOS_EC2_IPV4_LOCAL}:2379\" \\\n --discovery=\"https://discovery.etcd.io/\u003ctoken\u003e\"",
"name": "20-clct-etcd-member.conf"
}
],
"enable": true,
"name": "etcd-member.service"
}
]
}
}
Now that you have a machine booted it is time to play around. Check out the Container Linux Quickstart guide or dig into more specific topics.